编写一个程序,将所有素数从1加到

时间:2016-07-29 18:03:36

标签: java

我的代码有什么问题?

预计输出= 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;
        }
    }

4 个答案:

答案 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'语句将处理该质数并将其总和简化为否。将会被打印。这将节省大量时间来重新计算素数并找到它们的和。