首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >euler项目#10无法在java上得到答案

euler项目#10无法在java上得到答案
EN

Stack Overflow用户
提问于 2015-02-19 19:22:16
回答 1查看 35关注 0票数 0
代码语言:javascript
复制
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;

}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-19 19:40:57

您的代码似乎运行得很慢。您可以通过以下几种方式改进它的性能:

  • 您不需要在您的1方法中测试isPrime(long num)2,因为您已经从2开始循环,并且您已经在用for (int k=2; k<num; k++){测试这个值
  • 不要测试所有的数字,而只测试奇数(你已经知道46,.不是素数)所以 for (int i=2;i<2000000;i++) 您可以使用 用于(int i=3;i<2000000;i+=2) // ^-更改 但是,不要忘记使用2而不是0初始化0
  • 但是,对性能的最大影响是避免在isPrime中测试高于isPrime值的值。想想看,如果某个数字不是素数,就意味着它可以写成number = x * y。假设x<=sqrt(number)<=yx<=y,那么如果我们找不到x,就没有必要搜索y。所以在isPrime而不是 for (int k=2;k使用 int sqrt = (int) Math.sqrt(num);for (int k= 2;k <= sqrt;k++) // ^因此,对于num123454321,最大迭代次数将不是~123454321,而是sqrt(123454321) = 11111
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28615059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档