プロが教えるわが家の防犯対策術!

javaのプログラミングについて教えていただきたいです。
javaの授業で課題が出されて作っていますが、うまくできないです。課題の内容はn(整数)の素数判定についてです。for文やwhile文を使うことと、コマンドから入力することが条件です。
私が作ったのは、
class sample{
public static void main(String args[]){
int n;
String message1=args[0];
n=Integer.parseInt(message1);
int i;
if(n<=2){
System.out.println(n+"は素数ではありません。");
}
if(n==2){
System.out.println(n+"は素数です。");
}
for(i=2;i<=n-1;i++){
if((n%i)==0){
System.out.println(n+"は素数ではありません。");
break;
}else{
System.out.println(n+"は素数です。");
break;
}
}
}
}
全然わからないので、たぶんたくさん間違えていると思いますが、どのように直したら良いのでしょうか?
教えてください、よろしくお願いします。

A 回答 (3件)

Javaはよく分かっていませんが…。



>うまくできないです

まず、なにがうまくできないのか。というのは説明できますかね?
まぁ、おそらくループが回らないとは思いますけど。

ループ1回目、iが2なので…
>if((n%i)==0){
> System.out.println(n+"は素数ではありません。");
> break;
nが偶数だったら、素数ではない。と表示して抜ける。
# まぁ、素数ではないのが確定したなら以降のチェックは不要にでいいでしょう。
では、奇数だった場合は?
>}else{
> System.out.println(n+"は素数です。");
> break;
素数です。
と、表示してループを抜けます。
iが3以降だった場合のチェックは実行しません。
ということで、9は素数として表示します。
奇数は全て素数として返しますね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!返信遅くなってすみません。
偶数は抜けるけれど、奇数は抜けられないのはなんとなくわかったのですが、どういう風に直したらいいのかわかりません。教えてください。

お礼日時:2019/11/17 14:51

2は素数なので、


if(n<=2){
ではなく
if(n<2){
です。

for(i=2;i<=n-1;i++){

素数かどうかは、対象数値の平方根の整数値まで検証したら分かります。
Math.floor()
Math.sqrt()
を使いましょう。


class Sample{
public static void main(String args[]){
int n;
n = Integer.parseInt(args[0]);

if(n < 2){
System.out.println(n + "は素数ではありません。");
return;
}

// 対象数値の平方根までの整数で割り切れる数値は素数でない
int calcLimit = (int)Math.floor(Math.sqrt(n));
for (int i = 2; i <= calcLimit; i++) {
if (n % i == 0) {
System.out.println(n + "は素数ではありません。");
return;
}
}
System.out.println(n + "は素数です。");
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます!返信遅れてすみません。
教えていただきありがとうございます。しかし、Math.floor()などは一切習ってないので使えないです。

お礼日時:2019/11/17 14:53

習っていないからといって使ってはならない理由にはなりません。


自己学習および数学を理解している人ならば自然と思いつく発想です。

それでも使えない縛りがされるなら、i <= nでループしても、iの二乗した値がnを超えたらbreakすればいいかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!返信遅くなりました。
結局while文を使ったところ、できるようになりました。ありがとうございました。

お礼日時:2019/11/19 16:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!