用户在Java中需要的素数

时间:2013-07-03 06:49:30

标签: java algorithm primes

我想显示用户所需的素数。例如,如果用户想要第3个素数,我将显示5.我有以下java代码。

import java.util.Scanner;

public class Prime {

private static Scanner scanner;


public static void main(String args[]) {

 //get input till which prime number to be printed
 // System.out.println("Enter which prime number to be printed: ");
//  scanner = new Scanner(System.in);
//  int limit = scanner.nextInt();
  int count = 0;
  int number = 2;
  //System.out.println("Printing prime number from 1 to " + limit);
  while(count<=3)
  {
      if(isPrime(number)){
          count++;
         // System.out.println(count);
      }
      number++;
  }
  if(count == 3)
      System.out.println("10001 prime is "+number);

    }


public static boolean isPrime(int number){
    for(int i=2; i<number; i++){
       if(number%i == 0){
           return false; 
       }
    }
    return true; 
}
}

当我运行它时,我无法获得任何输出。我哪里错了? PS:暂时,我只运行循环直到3.

3 个答案:

答案 0 :(得分:5)

你有while(count <= 3)所以当你退出循环时,count == 4

因此,您的if(count == 3)永远不会输入,也不会打印任何内容。

答案 1 :(得分:1)

无论如何,更好的解决方案是

public void calcPrime(int inp) {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(2);
arr.add(3);

int counter = 4;

while(arr.size() < inp) {
    if(counter % 2 != 0 && counter%3 != 0) {
        int temp = 4;
        while(temp*temp <= counter) {
            if(counter % temp == 0)
                break;
            temp ++;
        }
        if(temp*temp > counter) {
            arr.add(counter);
        }
    }
    counter++;
}

System.out.println("finish" +arr.get(inp-1));
}
}

答案 2 :(得分:0)

以下是有效的更正代码。

public class Main {

public static void main(String args[]) {
    //Returns fourth prime number
    System.out.println(getPrimeNumber(4));


}

public static int getPrimeNumber(int order) {

    int currentOrder = 1;
    int currentNumber = 1;

    while (currentOrder < order) {
        currentNumber++;
        if (isPrime(currentNumber)) currentOrder++;
    }

    return currentNumber;

}


public static boolean isPrime(int number) {
    for (int i = 2; i < number; i++) {
        if (number % i == 0) {
            return false;
        }
    }
    return true;
}

}

没有必要在0开始你的计数器,从数字2开始在数学上是错误的!刚开始,order和currentNumber初始化为1,如果第一个素数是你的用户正在寻找的,那么就不需要循环了!

此外,正确变量初始化后的循环条件已从“&lt; =”更正为“&lt;”。

这就是全部!