Java eu​​ler程序错误

时间:2017-09-24 07:29:53

标签: java

如果我们列出10以下的所有自然数是3或5的倍数,我们得到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);


}

}

1 个答案:

答案 0 :(得分:0)

您可以在没有任何循环的情况下解决此问题只需计算相关arithmetic progressions的总和。

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

1到999之间3的倍数之和为(3+999)*333/2

1到999之间5的倍数之和为(5+995)*199/2

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

因此总需求总和为

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