【欧拉计划第 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

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


相关文章
|
1月前
|
算法 测试技术 C#
【矩阵】【方向】【素数】3044 出现频率最高的素数
【矩阵】【方向】【素数】3044 出现频率最高的素数
|
机器学习/深度学习
欧拉函数:求小于等于n且与n互质的数的个数
求小于等于n且与n互质的数的个数 互质穷举法 互质:两个数互质代表两者最大公约数为1 最大公约数求法:辗转相除法,最小公倍数:较大值除以最大公约数乘以较小值 辗转相除法: 较大的数a取模较小的数b,得取模值c 若取模值等于0 则最大公约数为取模值,否则继续下一步 a与c再次取模,回到第二步 //求最大公约数gcd以及最大公倍数lcm // 36 24 36/24 // 24 12 24/12 // 0 结束最大公约数为12 // 求最小公倍数 // lcm(a, b) = (a * b)/g
94 0
|
机器学习/深度学习
51nod 1225 余数之和 (数论)整除分块
51nod 1225 余数之和 (数论)整除分块
46 0
L1-048 矩阵A乘以B (15 分)
L1-048 矩阵A乘以B (15 分)
101 0
L1-048 矩阵A乘以B (15 分)
|
Python
【欧拉计划第 13 题】 大数之和 Large sum
【欧拉计划第 13 题】 大数之和 Large sum
109 0
【欧拉计划第 13 题】 大数之和 Large sum
求一个数n次方后的末尾数(数论/快速幂)
hdu1061-Rightmost Digit hdu1097-A hard puzzle 这两个oj题目思路几乎一样,都是为了快速求出一个数n次方后的末尾数为都多少?
193 0
求一个数n次方后的末尾数(数论/快速幂)
|
算法
【欧拉计划第 1 题】Multiples of 3 or 5
【欧拉计划第 1 题】Multiples of 3 or 5
【欧拉计划第 1 题】Multiples of 3 or 5
|
程序员 C语言 C++
L1-5 矩阵A乘以B (15 分)
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。
148 0
[kata]数值内3和5的倍数的总和求解
这个题是这样的,方法参数接受一个数值,以3,5为基数,返回小于这个参数的3,5的倍数,加上3,5本身总和. 朋友段帅说头疼,估计是天气原因吧,好起来吧,还得战斗呢. 将编程看作是一门艺术,而不单单是个技术。
1164 0
洛谷P1313 计算系数【快速幂+dp】
P1313 计算系数 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数。 输入输出格式 输入格式:   输入文件名为factor.in。 共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开。
1080 0