【欧拉计划第 1 题】3 或 5 的倍数 Multiples of 3 or 5

简介: 【欧拉计划第 1 题】3 或 5 的倍数 Multiples of 3 or 5

Problem 1 Multiples of 3 or 5

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

问题 1 3 或 5 的倍数

如果我们列出所有小于 10 且是 3 或 5 的倍数的自然数,我们会得到 3、5、6 和 9。这些倍数之和是 23。

求 1000 以下所有 3 或 5 的倍数之和。

思路分析

暴力求解

常规思路,找到 1000 以内所有 3 或 5 的倍数,分别求和解决

优化思路

由于暴力解法的算法执行效率很低,需要重复遍历 1000 次,自然效率低下。我们只需要枚举 3 的倍数之和、5 的倍数之和,最后减去它们的最小公倍数之和,便可节省不少时间

1000 以内 k 的倍数和为

( 1000 − 1 ) k \large \frac{\left (1000-1 \right)}{k}k(10001)

代码实现

暴力求解

/*
 * @Author: coder-jason
 * @Date: 2022-04-04 22:59:48
 * @LastEditTime: 2022-04-04 23:00:56
 */
#include <iostream>
using namespace std;
int main()
{
   int sum = 0;
   for (int i = 0; i < 1000;i++){
         if (i % 3 == 0 || i % 5 == 0){
              sum += i;
         }
   }
   cout<<sum<<endl;
   return 0;
}

优化思路

/*
 * @Author: coder-jason
 * @Date: 2022-04-04 22:59:48
 * @LastEditTime: 2022-04-04 23:14:34
 */
#include <iostream>
using namespace std;
int calculate()
{
      int sum3 = 0, sum5 = 0, sum15 = 0;
      for (int i = 0; i <= (1000 - 1) / 3; i++)
      {
            sum3 += i * 3; //求出3的倍数的和
      }
      for (int i = 0; i <= (1000 - 1) / 5; i++)
      {
            sum5 += i * 5; //求出5的倍数的和
      }
      for (int i = 0; i <= (1000 - 1) / 15; i++)
      {
            sum15 += i * 15; //求出15的倍数的和
      }
      return sum3 + sum5 - sum15;
}
int main()
{
      cout << calculate();
      return 0;
}

答案:233168

通过啦,既然是第一次,还是截个图记录下叭。以后也要继续加油啊,数学的优雅永不过时!!


相关文章
|
3月前
|
算法 Java
求多个数的最大公约数及比例化简
求多个数的最大公约数及比例化简
27 1
|
4月前
|
机器学习/深度学习 算法 Serverless
利用无穷级数逼近计算幂运算与开根号——Python实现
使用泰勒级数逼近法,本文介绍了如何用Python计算特殊幂运算,包括分数次幂和开根号。通过定义辅助函数,如`exp`、`getN_minus_n`、`multi`和`getnum`,实现了计算任意实数次幂的功能。实验结果显示,算法能有效计算不同情况下的幂运算,例如`0.09^2`、`1^2`、`0.25^2`、`0.09^(0.5)`、`1^(0.5)`和`0.25^(0.5)`。虽然精度可能有限,但可通过调整迭代次数平衡精度与计算速度。
|
5月前
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
45 0
|
5月前
|
算法 测试技术 C#
【矩阵】【方向】【素数】3044 出现频率最高的素数
【矩阵】【方向】【素数】3044 出现频率最高的素数
一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数
一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数
673 0
一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数
|
算法 C++
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现
素数又称为质数,它指在一个大于1的自然数中,除了1和它自身外,没法被其他自然数整除的数。比1大,但不是素数的数称为合数。0和1既不是素数,也不是合数。因为素数的分布没有明显的规律,所以在程序中一般根据素数的定义来判断该数是否为素数。例如哥德巴赫猜想:哥德巴赫通过大量的数据猜测,所有不小于6的偶数,都可以表示为两个奇素数之和。后人将其称之为“1+1”。并且,对于每个不小于9的奇数,都可以表示为三个奇素数之和。
292 0
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现
L1-048 矩阵A乘以B (15 分)
L1-048 矩阵A乘以B (15 分)
108 0
L1-048 矩阵A乘以B (15 分)
求一个数n次方后的末尾数(数论/快速幂)
hdu1061-Rightmost Digit hdu1097-A hard puzzle 这两个oj题目思路几乎一样,都是为了快速求出一个数n次方后的末尾数为都多少?
221 0
求一个数n次方后的末尾数(数论/快速幂)
|
算法
【欧拉计划第 1 题】Multiples of 3 or 5
【欧拉计划第 1 题】Multiples of 3 or 5
103 0
【欧拉计划第 1 题】Multiples of 3 or 5