-1

私はJavaの初心者です。そして、2,3,5,7,11,13,17,19を印刷しようとしています

これは私の思考プロセスです。印刷したい上記の数字は素数です。つまり、それらは自分自身または値 1 でしか割ることができません。 %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

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

しかし、なぜ 2,3,4,5... と 19 まで表示されるのだろうかと思います。

あなたのコードは、数値がそれ自体または 1 で割り切れるかどうかをテストしています。しかし、すべての数 (0 を除く) は、それ自体と 1 で割り切れます。したがって、(当然のことながら)あなたが試したすべての数字は「テスト」に合格します。

問題は、「テスト」が素数のテストとして間違っていることです。実際には、その数と 1だけで割り切れる数を見つける必要があります。これを行う簡単な方法は、割り切れる可能性のある他のすべての数値に対して数値をテストすることです。除算の定義に基づいて、これを高校の数学の簡単な数の有限集合に制限することができます。

于 2013-02-26T06:00:18.343 に答える
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 に答える