有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java打印前N个素数

语句是:编写一个程序,读取整数N并打印前N个素数

public static void main(String[] args) 
{
    Scanner scan = new Scanner(System.in);

    int N = scan.nextInt();
    int x = 2;

    for(int i = 0; i <= N; i++)
    {
        int count = 0;

        for(int j = 1; j <= x; j++)
            if(x%j == 0)
                count++;

        if(count == 2)
            System.out.print(x + " ");

        x++;
    }
}

当我运行这个代码时,它并没有给出确切的N个数字。例如,对于N=1&;它正在打印前两个素数,对于N=3&;4,它正在打印前3个素数,对于N=5&;6,它正在打印前4个素数,依此类推。这个代码有什么问题


共 (5) 个答案

  1. # 1 楼答案

    使用动态规划:

    任何非素数的数总是至少可被数列中它前面的一个素数整除。 如果任何一个数不与它前面的所有素数相除,那么这个数也是素数

    void printPrimeNumbers(int n) {
        ArrayList<Integer> primeNumbers = new ArrayList<>();
        primeNumbers.add(2);
        for (int i = 3; i < n; i+=2) { // skip over even numbers since they are not prime
            boolean isPrime = true;
            for (Integer prime : primeNumbers) { // check current prime numbers to see if it evenly divides into number
                if (i % prime == 0) { // when number is not prime
                    isPrime = false;
                    break; // optimization: stop checking when number is already not prime
                }
            }
            if (isPrime) {
                primeNumbers.add(i);
            }
        }
        System.out.println(primeNumbers);
    }
    
  2. # 2 楼答案

    其他人写的代码比你的好,我会解释为什么你的代码不起作用

    你不是在搜索前N个素数,而是在搜索N+2的素数。在代码中,x从2开始,一直到N+2

    如果你想找到N个第一个素数,你必须在N不等于0时循环,并且每次找到一个素数时减少N

    (等等,这个问题是2015年的……该死)

  3. # 3 楼答案

    我认为您的程序中有许多缺陷需要修复,因此我决定编写一个更简单、更优雅的程序

    Scanner scan = new Scanner(System.in);
    int N = Integer.parseInt( scan.nextLine());
    int count = 0;
    int num = 2;
    while(count != N) { // while count!= number of prime numbers entered keep searching..
        boolean prime = true;// to determine whether the number is prime or not
        for (int i = 2; i <= Math.sqrt(num); i++) { //efficiency matters
            if (num % i == 0) {
                prime = false; // if number divides any other number its not a prime so set prime to false and break the loop.
                break;
            }
    
        }
        if (prime) {
            count++;
            System.out.println(num);
        }
        num++; see if next number is prime or not.
    }
    
  4. # 4 楼答案

    // Java Program to generate first 'N' Prime Numbers
    public class prime
    {
        public static void main(String[]args)
        {
            int count = 0, max_count = 100, i;
            System.out.println("First "+max_count+" Prime Numbers:");
    
            for(int num=1; count<max_count; num++)
            {
                for(i=2; num%i != 0; i++);
    
                if(i == num)
                {
                    System.out.print(" "+num);
                    count++;
                }
            }
        }
    }
    
  5. # 5 楼答案

    public static void main(String... commandline_args)
    {
      try
      { 
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Please enter the limit of prime nos");
            int limit=Integer.parseInt(br.readLine());
            int checkLimit=0;
            int check=0;
        outer:  for(int i=2;;i++){
                check=0;
                for(int j=1;j<=i;j++)
                {
                    if(i%j==0)
                    {
                        check++;
    
                    }
                }
                if(check==2)
                {
                    checkLimit++;
                    System.out.println(i);
                    if(checkLimit==limit) break outer;                  
                }               
            }
      }
      catch(Exception e) 
      {
        System.out.println(e);
      }
    }