質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1064閲覧

素数の求め方について

moritat-222

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/09/19 12:48

編集2021/09/19 12:56

「"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」でもプログラムは正しく素数を判定しています。

どういう理屈でそうなっているのでしょうか・・・?

プログラムの問題というより数学的な理屈の問題で恐縮なのですが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

これは算数の範疇の話ですね。
iが、i/2以上の数xで割り切れたら、その商yi/2より小さいです。
i/2以上の数を2つ掛けると、必ずその積はiより大きいです。
(正確にはこれが成り立つのはiが4以上の場合ですが、2や3は素数なので関係ない)

なので、小さい方から順に割ってけば、xより先にyで割り切れるのでそこで終わりです。
なお、i/2まで調べる必要もなくて、iの平方根まで調べれば十分なので、普通は平方根まで調べます。

投稿2021/09/19 13:09

otn

総合スコア84808

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moritat-222

2021/09/19 13:28

iがi/2以上の数で割れるならば、その商は必ずi/2より小さいので、iが商だった時にもう判定されているはず (例えばi=28なら、j=14まで調べなくとも、j=2の時点で割り切れると判明している)ということですね。 スッキリしました。 ありがとうございます!
guest

0

17が素数かどうかを判定したいとき、半分の8まで調べれば十分ですよね。検査対象の半分超の数で割り切れることはない。

投稿2021/09/19 13:07

shiketa

総合スコア3990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/09/19 13:08

25 が素数かどうかを判定したい時、半分の 12 ではなく 5 まで調べれば十分です。
otn

2021/09/19 13:11

半分まで調べることが必要と言ってるわけじゃないので、間違ってはいないので、低評価はおかしいな。
shiketa

2021/09/19 13:14

問いが > なぜ、iが素数なのかを確かめるために、「j<i/2」までfor文を回すことになるのでしょうか? だったのよ。
Zuishin

2021/09/19 13:16

j<i/2 まで回す必要はないので、「回すこと」にはならないのよ。 低評価がおかしいなら高評価すればいいのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問