package edu.wust;
//1000一下3或5的倍数之和
public class work001 {
/**
* 解法1 (常规办法)
* 思路:遍历一遍1到1000 是3,5倍数则加
* 时间复杂度:O( n )
* 空间复杂度:O( 1 )
*/
public static void fun1(){
int sum=0;
for(var i=1;i<1000;i++){
if(i%3==0||i%5==0){
sum+=i;
}
}
System.out.println(sum);
}
/**
* 解法2 (数学公式思想)
* 思路:3的倍数+5的倍数和-它们的最小公倍数的和(15)
* 【2 4 的倍数和为 2的倍数+4的倍数和-它们的最小公倍数的和(4)】
*时间复杂度:O( 1 )
*空间复杂度:O( 1 )
*/
public static void main(String[] args) {
int a=999/3,b=999/5,c=999/15;//1000内 3 5 15 倍数的个数
int sum=a*(a+1)/2*3+b*(b+1)/2*5-c*(c+1)/2*15;
System.out.println(sum);
}
}
注:本题以求1000以下的3和5的倍数为例
两种思路求解:
1.常规法 把1000内数字都遍历一遍
2.根据数学公式法求