「"0~100"までの素数を表示するプログラム」をJavaで作成しようとしています。
こちらのサイトを参考にプログラムを作成したら、無事プログラムをつくることができたのですが、素数を求める処理の中で、1点わからないことがあります。
java
1 public static void main(String[] args){ 2 boolean f; //素数ならtrue 3 for(int i = 2; i<=100; i ++){ 4 f = true; 5 for (int j = 2; j < i/2; j++) { //割れたら素数ではない。なぜ「i/2」なのか? 6 if (i % j == 0) { 7 f = false; 8 break; 9 } 10 } 11 if(f) { 12 System.out.println(i + " "); 13 } 14 } 15 } 16}
上記のプログラムでは、iは素数か判定したい数(割られる数)、jは素数判定するための割る数である、というところまでは理解できます。
ここで、なぜ、iが素数なのかを確かめるために、「j<i/2」までfor文を回すことになるのでしょうか?
「約数が 1 と自分自身のみの数かどうか」を確かめるためには、割る数であるjが「j<i」の場合まで割ってみて判定する必要があるように思うのですが(実際「j<i」でもプログラムは正しく動きます)、「j<i/2」でもプログラムは正しく素数を判定しています。
どういう理屈でそうなっているのでしょうか・・・?
プログラムの問題というより数学的な理屈の問題で恐縮なのですが、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/19 13:28
2021/09/19 13:59 編集