2017-12-23 8 views
0

プログラムが素数を見つけたら、コンパイルします。素数1〜100を見つけるときにエラーjava.lang.ArithmeticExceptionを解く方法

実行中にエラーが発生しました。どうすれば修正できますか?

素数を見つける最も簡単な方法は何ですか?

エラー:

Exception in thread "main" java.lang.ArithmeticException:/by zero 
    at PrimeNumbers.main(PrimeNumbers.java:6) 

コード:ゼロのモジュラーは誤りですので

import java.util.*; 

class PrimeNumbers { 

    public static void main(String args[]) { 
     for (int i = 0; i <= 100; i++) { 
      for (int j = 0; j < i; j++) { 
       if (i % j == 0) { 
        break; 
       } else { 
        System.out.println(i); 
       } 
      } 
     } 
    } 
} 
+0

【はArithmeticException(https://stackoverflow.com/questions/2717032/arithmeticexception-java)2からではなく1から開始する必要がj' 1の代わりに0 – Satya

+0

開始ループ変数。 'j'が1から始まる場合、エラーは発生しませんが、素数は表示されません。 – M2E67

+0

なし、 'から –

答えて

1

あなたは、このようにコードを変更する必要があります。

class PrimeNumbers{ 
public static void main(String args[]) 
{ 
    boolean flag; 
    for(int i=1;i<=100;i++) 
    { 
     flag = true; 
     for(int j=2;j<=(i/2);j++){ 
      if(i%j==0) 
       flag = false;; 
     if(flag == true) 
      System.out.println(i); 
    } 
} 
+0

ホセインに感謝します。はい、素数を印刷します。しかし、1つの数字が複数回印刷されることがあります。なぜですか? –

1

あなたは1ない0から開始するループの2番目を変更する必要があります。

for(int j=1;j<i;j++){ 
     if(i%j==0){ 
+0

これは実際には正しくありません。質問の下に私のコメントを参照してください。 –

+0

しかし、あなたが得るエラーは、0から始まるループのためです。 –

+0

はい、それは当てはまりますが、OPは2から開始し、1から始まらないように変更する必要があります。 –

0

あなたは私= 0とj = 0、あなたのループの最初の反復を持っています。モジュラスを得るために、iをjで割る。そのためには、最初の反復で実行されています

0/0

をこのようにゼロ例外によって除算を得ます。

+0

Ok.Got it.Thank。 –

0

素数計算の2つの方法があります。

public static boolean isPrime(long num) { 
    return num > 1 && LongStream.rangeClosed(2, (long)Math.sqrt(num)).noneMatch(div -> num % div == 0); 
} 

public static boolean isPrime1(long num) { 
    for (long i = 2, sqrt = (long)Math.sqrt(num); i <= sqrt; i++) 
     if (num % i == 0) 
      return false; 
    return true; 
} 

メインパフォーマンストリックは、最初Math.sqrt(NUM)番号を確認するのに十分です。

+0

かなりクールです。ありがとうございます。私は "ループ"タイプのソースコードを探しました。ありがとうございます。 –

0
public static void main(String args[]){ 
      boolean flag=false; 
      int i=1; 
      while(i<=100){ 
       for(int j=2;j<=i/2;j++) { 
        if(i%j==0){ 
         flag=true; 
         break; 
        }else { 
         flag=false; 
        } 

       } 
       if(flag!=true) { 
         System.out.println("Prime number--->" +i); 
        } 
       i++; 
      } 

     } 
+0

素晴らしい作品です。ありがとうございます。 –

関連する問題