java循环语句素数_java – for循环查找素数

在isPrime中,您只测试2分区:

private static boolean isPrime(long n) {

boolean result = false;

for(long i=1; i

if(n%2 == 0) {

result = false;

break;

}

else result = true;

}

return result;

}

它应该被每个i划分并从2开始:

for(long i=2; i

if(n%i == 0) {

...

实际上在你当前的版本中,奇数n将继续除以2到n / 2而不是更快地停止.考虑n = 21.您将2从1除以1,而不是在第3步除以3并退出.

它不仅会给出不正确的结果,而且还需要比达到return语句所需的时间更长的时间.

编辑:为了更快的结果,请查看Erathostenes方法的筛子:

public static long sumOfPrimes(int n) {

long sum = 0;

boolean[] sieve = new boolean[n];

for(int i = 2; i < Math.sqrt(n); i++) {

if(!sieve[i]) {

for(int j = i * i; j < n; j += i) {

sieve[j] = true;

}

}

}

for(int i = 2; i < n; i++) {

if(!sieve[i]) {

sum += i;

}

}

return sum;

}

编辑#2:发现新版本的一些错误.这是纠正的一个:

private static boolean isPrime(long n) {

boolean result = false;

if(n == 2 || n == 3) return true;

for (long i = 2; i <= (long) Math.sqrt(n); i++) {

if (n % i == 0) {

result = false;

break;

} else

result = true;

}

System.out.println(n + " " + result);

return result;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值