-1

I am a beginner to java.And i am trying to print 2,3,5,7,11,13,17,19

This is my thought process.the above numbers i want to print are prime numbers which means they can only be divided by themselves or the value 1.So i will need to have a condition which is 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(",");
            }
        }
    }
}

I try to think through my codes but i wonder why it will print out 2,3,4,5...and up till 19 when i already have a condition.I will appreciate if someone will give me hints for me to work out instead of posting the solutions.

4

4 回答 4

9

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

要获得更有效的方法,请查看埃拉托色尼筛。

于 2013-02-26T05:17:02.347 回答
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
  }
}
于 2013-02-26T05:21:42.177 回答
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");
    }
}
于 2013-02-26T06:02:21.967 回答
0

但我想知道为什么它会打印出 2,3,4,5 ......当我已经有条件时,它会打印到 19。

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

问题是“测试”作为质数测试是错误的。你实际上需要找到只能被它们自己和一个整除的数字。执行此操作的简单方法是将您的数字与它可以被整除的所有其他数字进行测试。您可以通过一些简单的高中数学将其限制为一组有限的数字......基于除法的定义。

于 2013-02-26T06:00:18.343 回答