首先重温一下等差数列公式:
利用公式即可用更小的时间复杂度求解此问题:
package com.company;
import java.util.*;
public class Main{
public static void main(String args[]) {
/**
* 我们将此分解为两个问题,首先解决1-1000以内可以被3或5整除的数各有多少个?
* 1000/3=333.3333... 1-1000有333个数可以被3整除;
* 1000/5=200 1-1000有200个数可以被5整除;
* 1000/15=66.666... 1-1000有66个数可以被15整除;
*/
int n3 = 1000/3;
int n5 = 1000/5;
int n15 = 1000/15;
/**
* 接下来使用到等差数列前n项和公式:
*/
double sum3 = n3*3+n3*(n3-1)/2.0*3;
double sum5 = n5*5+n5*(n5-1)/2.0*5;
double sum15 = n15*15+n15*(n15-1)/2.0*15;
double sum = sum3+sum5-sum15;
System.out.println(sum);
}
}