我的代码有什么问题?
预计输出= 1060
我检查了1000个素数和。它会正确显示 输出3682913
public class PrimeNumber {
public static void main(String args[]){
int number = 2;
int count = 0;
long sum = 0;
while(count <100){
if(isPrimeNumber(number)){
sum += number;
count++;
}
number++;
}
System.out.println(sum);
}
private static boolean isPrimeNumber(int number){
for(int i=2; i<=number/2; i++){
if(number % i == 0){
return false;
}
}
return true;
}
}
答案 0 :(得分:5)
您正在计算 100个素数,但不能达到 100个数字。
所以你的while循环最多可以运行100个数字。
这应该是你的主要方法:
int number = 2;
int count = 0;
long sum = 0;
while(number <= 100){
if(isPrimeNumber(number)){
sum += number;
count++;
}
number++;
}
System.out.println(sum);
}
这会使您的输出 1060 。
答案 1 :(得分:1)
您可以使用下面给出的代码来查找1到100之间的第一个素数之和。它将为您提供正确的输出。
99
答案 2 :(得分:1)
目前,您正在计算前100个素数,而不是在1 - 100范围内找到的素数。您可以完全丢失计数变量。
您的代码可以简化,使用for循环代替从2到100(当然不包括1个)...
public class PrimeNumber {
public static void main(String args[]) {
long sum = 0;
for (int number = 2; number <= 100; number++) {
if (isPrimeNumber(number)) {
sum += number;
}
}
System.out.println(sum);
}
private static boolean isPrimeNumber(int number){
for (int i = 2; i <= number / 2; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
答案 3 :(得分:0)
import java.util.Scanner;
public class Trial{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean flag = false;
int max = 1000001;
long[] a = new long[max];
a[0] = 2;
int i = 3,j=0;
long sum = 2;
int t = in.nextInt();
for(int a0 = 0; a0 < t; a0++){
long sum1 = 0;
int n = in.nextInt();
if(n>=i){
while(i<=n){
for(int y=0;a[y]<=Math.sqrt(i);y++){
if(a[y]==0){
break;
}
else if (i%a[y]==0){
flag = true;
break;
}
}
if(!flag){
a[++j]=i;
sum+=i;
}
flag =false;
i+=2;
}
System.out.println(sum);
}
else{
for(int y=0;a[y]<=n&&a[y]!=0;y++){
sum1+=a[y];
}
System.out.println(sum1);
}
}
}
}
在这里,如果对数组中已经存在的数字有任何查询,我会在数组中存储质数,第一个'if'语句将处理该质数并将其总和简化为否。将会被打印。这将节省大量时间来重新计算素数并找到它们的和。