首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler #10,java

项目Euler #10,java
EN

Stack Overflow用户
提问于 2010-08-03 18:16:17
回答 4查看 5.1K关注 0票数 0

可能重复: 项目Euler,问题10 java解决方案不起作用

所以,我试图用Java来解决Euler项目问题10问题,但我没有得到正确的答案。这是我的密码:

代码语言:javascript
复制
public class Problem10 {
public static void main(String[] args)
{
    long sum =0;
    for(int i =3;i<2000000;i+=2)
    {
        if(isPrime(i))
        {
            sum+=i;
        }
    }
    System.out.println(sum);
}

public static boolean isPrime(int n)
{
    boolean prime = true;
    if (n<2) return false;
    if (n==2) return true;
    if (n%2==0) return false;
    for (int i = 3; i<=Math.sqrt(n);i+=2)
    {
        if (n%i==0)
        {
            prime=false;
            break;
        }
    }
    return prime;
}
}

它打印出142913828920,哪个项目欧拉告诉我是错误的。

有什么想法吗?

(而且,我知道我找素数的方法效率很低。)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-03 18:17:53

代码语言:javascript
复制
for(int i =3;i<2000000;i+=2)

2是素数。

票数 2
EN

Stack Overflow用户

发布于 2010-08-08 22:19:57

只需除以素数,就可以稍微加快代码的速度。例如,你可以知道35不是一个素数,只需将它除以2,3,5。不需要尝试4。诀窍是,每当你找到素数时,把它保存在一个列表或向量中。在您的isPrime函数中,只需迭代列表,直到它到达sqrt(n),而不是3..sqrt(n)之间的每个值。

票数 1
EN

Stack Overflow用户

发布于 2010-08-08 23:46:45

你可以通过使用筛子来加速你的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3399451

复制
相关文章

相似问题

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