public static void main(String[] args) {
    long sum=0;

    problemTen a= new problemTen();
    for (int i=2; i<2000000 ; i++){
        if(a.isPrime(i))
            sum += i;

    }
    System.out.println(sum);



}

public boolean isPrime(long num){
    if(num==1) return false;
    if(num==2) return true;
    for (int k=2; k<num; k++){
        if(num%k ==0) return false;
    }
    return true;

}


控制台没有给我任何答案。你能帮忙吗?

最佳答案

您的代码似乎运行缓慢。您可以通过几种方式提高其性能:


您无需在1方法中测试2isPrime(long num),因为您已经开始从2循环,并且已经在使用for (int k=2; k<num; k++){测试该值
不要测试所有数字,而只能测试奇数(您已经知道46,...不是质数),所以不要

for (int i=2; i<2000000 ; i++)


您可以使用

for (int i=3; i<2000000 ; i+=2)
//         ^              ^^^^ - changes


但不要忘记使用sum而不是2初始化0
但是对性能的最大影响是避免测试sqrt(num)中的isPrime值以上的值。想想看,如果某个数字不是素数,则意味着它可以写为number = x * y。假设x y,我们知道x sqrt(number) y,因此,如果我们警告找不到x,则搜索y没有意义。所以在isPrime而不是

for (int k=2; k<num; k++)


采用

int sqrt = (int) Math.sqrt(num);
for (int k = 2; k <= sqrt; k++)
//              ^^^^^^^^^^


因此,对于num这样的123454321,最大迭代次数不是~123454321,而是sqrt(123454321) = 11111

关于java - 欧拉项目#10无法在Java上得到答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28615059/

10-08 22:24
查看更多