计算素数?

时间:2014-10-27 23:20:19

标签: loops input primes conditional

所以,这是我的问题,我有功课。

编写一个带有命令行参数N(整数,N> = 1)的程序,并打印小于或等于N的素数。如果数字只能被自身整除,则该数字为素数。 1。

这是我到目前为止提出的代码,我确信它有很多错误。

import java.util.Random;

public class PrimeCounter {
    public static void main(String[] args) {
        Random rand = new Random();
        int N = rand.nextInt();

        for(int number = 2; 1 <= N; number++){
            if(isPrime(number)){
                System.out.println(number);
            }
        }
    }

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

有什么建议吗?每次我通过日食运行单元测试时,我的教授给我的所有测试都失败了。从我理解作业的方式来看,他希望程序取数字N并打印出多少素数小于或等于N.问题是我们还没有超过输入,所以我&# 39;我不确定如果没有N的某种输入线,他希望我们如何做这个程序?

2 个答案:

答案 0 :(得分:0)

1:当您通过命令行运行Java程序时,您可以选择提供&#34;参数&#34;存储在args数组中的那些(&#34; String [] args&#34;用于)。

例如,命令&#34; java PrimeCounter 1000&#34;会运行你的程序并存储&#34; 1000&#34; (作为字符串)在args数组中。您可以通过args [0]访问它,它返回数组的第一个插槽中的字符串(您必须将其转换为整数),在这种情况下,它将是&#34; 1000&# 34。

2:以下是对您的代码的一些评论:

if(isPrime(number)){
    System.out.println(number);
}

打印出每个素数,而不是素数。你应该在&#34;计数器&#34;中添加1每当你找到一个素数时变量,然后在你完成搜索时打印该计数器。

for(int number = 2; 1 <= N; number++){

&#34; 1&lt; = N&#34;转换为&#34;当1小于N&#34;时,您希望在数字小于N时继续。

答案 1 :(得分:0)

这是Sieve of Eratosthenes的实现。

public class PrimeCounter {
  public static boolean isPrime(int number){
    if(number == 2 || number == 3 | number == 5 || number == 7) return true;
    return ((number % 2) != 0 && (number % 3) != 0 && (number % 5) != 0 && (number % 7) != 0);
  }

  public static void main(String args[]){
    if(args.length == 0){
      System.out.println("Usage:\n\tjava primecounter <number>");
      System.exit(0);
    }
    int ceiling = Integer.parseInt(args[0]);
    int numberprimes = 0;
    for(int i = 0;i < ceiling;i++){
      if(PrimeCounter.isPrime(i)){
        numberprimes++;
        System.out.println(i);
      }
    }
    System.out.println("Total Number of Primes: " + numberprimes);
  }
}

可以这样运行:

javac <file>.java
java  <file> <numberToGoUpTo>

注意以上只能在指挥线上工作!
PS:不包括.java