如何打印素数?

时间:2013-02-26 05:15:04

标签: java

我是java的初学者。我正在尝试打印2,3,5,7,11,13,17,19

这是我的思考过程。我想要打印的上述数字是素数,这意味着它们只能由它们自己或值1来划分。所以我需要有条件if if(i%i == 0 ||%1 == 0){

import java.util.*;
public class PrimePrinter{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter num> ");
        int input=sc.nextInt();

        for(int i=2;i<=19;i++){
            if(i%i==0&&i%1==0){
                System.out.print(i);
            }else {
                System.out.print(",");
            }
        }
    }
}

我试着通过我的代码思考,但我想知道为什么它会打印2,3,4,5 ...直到19岁时我已经有条件。如果有人会给我提示,我将不胜感激找出而不是发布解决方案。

4 个答案:

答案 0 :(得分:9)

你只是检查他们是否可以被1和他们自己整除。每个数字都可以被1和它自身整除。素数只能被1和它们自己整除,所以天真的方法是测试它们是否可以被1和i之间的其他数字整除。

要想以更有效的方式做到这一点,请查看Eratosthenes的Sieve。

答案 1 :(得分:2)

当数字被自身除以1时,数字是素数.1不是素数。在你的程序中,你将数字除以1,这是错误的

import java.util.*;
public class PrimePrinter{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter num> ");
        int input=sc.nextInt();

        // Instead of 19 you should use "input"
        // So the program will print all the numbers which are prime till input
        for(int i=2;i<=19;i++){
            if(isPrime(i))
              System.out.print(i+", ");
            }
        }
    }

  public static boolean isPrime(int number){
    for(int i=2; i<number; i++){
      if(number%i == 0){
        return false;//number is divisible so its not prime
    }
   return true; //number is prime
  }
}

答案 2 :(得分:0)

  

但是我想知道为什么它会打印出2,3,4,5 ......直到19岁时我已经有了病情。

您的代码正在测试一个数字本身是否可被整除。但每个数字(除了零)都可以被自身和一个整除。所以(自然地)你尝试的每个数字都通过了“测试”。

问题是“测试”作为质数测试是错误的。实际上,您需要找到仅 可被自身和一个整除的数字。执行此操作的简单方法是针对可以被整除的每个其他数字测试您的数字。你可以用一些简单的高中数学把它限制在一组有限的数字......基于除法的定义。

答案 3 :(得分:0)

如果一个数字只能被1和它自身整除,则它被认为是素数。它可以通过检查2 - >的可分性来识别。 SQRT(n)(代替n-1,(n)的SQRT就足够了)。还有其他算法可以提供更高的效率,但对于初学者来说,这既足够又有效。整个代码段如下所示:

public class PrimeNumberTest {
    public static void main(String args[]) {
        boolean isPrime = true;
        int num = Integer.parseInt(args[0]);
        for (int i = 2; i < Math.sqrt(num); i++) {
            if(num != i && num % i == 0) {
                isPrime = false;
                break;
            }
        }
        if (isPrime)
            System.out.println(num + " is prime");
        else
            System.out.println(num + " is not prime");
    }
}