Java Euler程序错误



如果我们列出了3或5的倍数低于10的所有自然数,则获得3、5、6和9。这些倍数的总和为23。

找到1000以下3或5的所有倍数的总和。

项目Euler找到了解决方案,我得到了array out of bounds error

import java.awt.List;
import java.util.Vector;
import java.util.ArrayList;
import java.util.stream.*;
 //print the sum of the multiples of 3 and 5 below 1000
 public class multiples_of_3_and_5 {
public static void main(String[] args) {
    int mult3[] = new int[200];
    int mult5[] = new int[200];

    for (int i = 1; i <= 1000; i+=3 -1) {
        for (int x = 0; x <= mult3.length; x++) {
            mult3[x] = i;
        }
    }
    for (int i = 1; i <= 1000; i+=5 -1 ) {
        for(int x = 0; x <= mult5.length; x++) {
            mult5[x] = i;
        }
    }
    int threeTotal = IntStream.of(mult3).sum();
    int fiveTotal = IntStream.of(mult5).sum();
    System.out.println(threeTotal);
    System.out.println(fiveTotal);

}
}

您可以无需任何循环解决这个问题。只需计算相关算术进程的总和即可。

算术进程的总和为n(a 1 a n )/2,其中a 1 是第一个元素,a n 是最后一个元素,n是元素的数量。

1至999之间3的倍数的总和是(3+999)*333/2

1至999之间5的倍数的总和是(5+995)*199/2

这两个总和都包括15的倍数,因此您必须在1到999之间减去15的倍数的总和,即(15+990)*66/2

因此,所需的总和为

(3+999)*333/2 + (5+995)*199/2 - (15+990)*66/2

最新更新