所以,我试图用Java来解决Euler项目问题10问题,但我没有得到正确的答案。这是我的密码:
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,哪个项目欧拉告诉我是错误的。
有什么想法吗?
(而且,我知道我找素数的方法效率很低。)
发布于 2010-08-03 18:17:53
for(int i =3;i<2000000;i+=2)2是素数。
发布于 2010-08-08 22:19:57
只需除以素数,就可以稍微加快代码的速度。例如,你可以知道35不是一个素数,只需将它除以2,3,5。不需要尝试4。诀窍是,每当你找到素数时,把它保存在一个列表或向量中。在您的isPrime函数中,只需迭代列表,直到它到达sqrt(n),而不是3..sqrt(n)之间的每个值。
发布于 2010-08-08 23:46:45
你可以通过使用筛子来加速你的代码。
https://stackoverflow.com/questions/3399451
复制相似问题