2017-08-02 7 views
-2

私はjavaを初めて使っています。私は素数を見つけるためのプログラムを作成しようとしています。私は素数を得るための解決策がたくさんあることを知っていますが、今日では、与えられた数を2,3,5,7で割った値がプライムではないことを確認したプログラムをコーディングしました。この論理は正しいか、素数を計算するには不十分ですか?参考のため;ここにコードがありますが、驚くべきことに、それは正しく評価されています。素数にはこれとは違う論理ですか?

import java.util.Scanner; 
public class Prime 
{ 
    public static void main(String[] args) 
    { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter number"); 
     int n = sc.nextInt(); 
     if(n==1) { 
      System.out.println(n+" is not prime"); 
     } else if(n==2) { 
      System.out.println(n+" is prime"); 
     } else if(n%2==0 || n%3==0 || n%5==0 || n%7==0) { 
      System.out.println(n+" is not prime"); 
     } else { 
      System.out.println(n+" is prime"); 
     } 
    } 
} 
+0

私はそれが正しいと思います。私たちのコードは、2,3,5と7の結果を使って同じです。しかし、おそらくあなたはこのサイトのための質問ですか? – jace

+0

私はあなたがこのコードを書くことができる本当に素数であることを確認すると思います:int i、m = 0、flag = 0; int n = 17; //チェックする番号です m = n/2; for(i = 2; i <= m; i ++){ if(n%i == 0){ System.out.println( "Numberはプライムではありません"); フラグ= 1; 休憩。 } } if(flag == 0) System.out.println( "Number is prime"); –

+3

これは、開発者が自分のコードをテストすることを信頼できない理由の完全な例です:-) –

答えて

4

素数を計算するために、このロジックを右または不十分です。

いいえあなたは素数の(小)サブセットで割り切れる数だけをテストしています。大きい数字の場合、いくつかの数字が素数でないときに素数として誤って報告されます。

また、いくつかの小数は、プライムではないと誤って報告されます。

参考のため、ここにコードがありますが、驚くべきことに、それは正しく評価されています。単にあなたが7みてください121

または3、5または7よりも大きい2(またはそれ以上)の素数の積ではない数のためにそれをテストしていない意味

0

エラーです!まず第一に、3,5,7すべてがpirmeであり、コード3を入力すると、このプログラムは "3が素数でない"と表示し、5,7を入力します。そうではありません!

+0

3は素数ですが、本当に小さい素数です - ほとんどカウントしません。 – Jeff

+0

良いキャッチ。もう一つの理由。 –

+0

@Jeffは大きくても小さくても、3は素数です。 OPのプログラムには、複数の点で欠陥があります。これはただの1つです。 –

2

いいえ、それでは不十分です。小さな数字の場合は動作しますが、これらの倍数ではなく、11,13,17などの倍数になります。あなたはあなたの番号の平方根より小さいすべての素数に対してチェックする必要があります。 ニコから指摘されているように、素数ではない素数もマークされます。

0

Sieve of Eratosthenesの方が良いかどうかチェックすると、素数と高速のパフォーマンスを得るには最適なソリューションです。あなたはすぐにそれを得ることはできませんが、それは価値がある

関連する問題