2013-02-26 32 views
-1

我是初学者java.And我试图打印2,3,5,7,11,13,17,19如何打印素数?

这是我的思考过程。我想打印的上述数字是素数这意味着它们只能通过自身或值被划分1.So我将需要有一个条件是,如果(ⅰ%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岁,当我已经有一个条件。我会很感激,如果有人会给我暗示,我的工作,而不是张贴解决方案。

+0

所有合数也由1整除和自己,所以你的首要测试并未真正发挥作用。 – 2013-02-26 05:16:33

+0

'i%i'和'i%1'将始终为'0'。 – Blender 2013-02-26 05:16:34

回答

9

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

要更有效地做到这一点,请查看Eratosthenes的筛子。

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 
    } 
} 
0

,但我不知道为什么它会打印出2,3,4,5 ......而截至19时,我已经有一个条件。

您的代码正在测试一个数字是否可以自行整除。但号码(除零)可以自己和一个整除。所以(自然而然)你试过的每一个数字都会通过“测试”。

问题是,“测试”作为素数测试是错误的。你实际上需要找到的号码是只有可以自己和一个整除。要做到这一点的简单方法是测试您的号码对其可以被整除的每个其他号码。你可以用一些简单的高中数学来限制这个数字的有限集合......根据分裂的定义。

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"); 
    } 
}