-6

//ループと意思決定ステートメントでそれを行うことになっていますが、機能していません。ヘルプ!

import java.util.Scanner;
public class main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        //Declare variables
        Scanner abc;
        abc = new Scanner (System.in);
        int input;
        int divide = 2;
        int count=0;

        //Ask for input
        System.out.println("Please enter an integer to determine if it is prime");
        input = abc.nextInt();

        //Do math
        for (int x=1; x < input; x++) {
            if ((input%divide) == 0)
                count += 1;
            divide = divide + 1;
        }

        if (count == 0)
            System.out.println("It is a prime number");
        else
            System.out.println("It is not a prime number");
    }
}
4

5 に答える 5

1

は1 と を数えないcount因数の数を数えることになっているようです。読みやすくするために、 の代わりに numOfFactors のような名前を使用することをお勧めします。inputinputcount

それを踏まえて、ループを見て、これらの質問に答えてください。私はあなたに答えを与えるつもりはありません。(はい、他の人のコメントを見て答えを得ることができますが、とにかくこれらの質問に答えることでより多くを学ぶことができると思います.)

(1)ループの最初xdivide、最初にループを通過するのは何ですか?

(2) と に何が起こるかを見るxと、ループの各回の開始時にとdivideの間に単純な関係があります。それは何ですか?xdivide

(3)最後にループを通過したのはいつですかx?

(4) #2 と #3 への回答に基づいてdivide、前回のループの最初の部分は何ですか? input%divide は何に等しくなりますか?

それが機能していない理由です。最初にそれを理解してください。次に、それをより効率的に機能させる方法について説明します。

MORE: わかりました、もう 1 つ言います。が 0かどうかだけを気にするcount場合は、要因が見つかったらすぐにループを終了できます。このような:

if ((input%divide) == 0)
{
    count += 1;
    break;
}

(そして、そのようにする場合は、代わりにcounta を使用する必要があります。boolean foundAFactorなぜなら、それが言うのは、因子がいくつあるかではなく、因子を見つけたかどうかだけだからです。)

しかし、因子の正確な数を本当に知りたい場合は、そうしないでください。

于 2013-07-31T22:54:36.047 に答える
1

for (int x=2; x < input; x++) (x=1に変更x=2)

そうしないと、5 が素数かどうかをテストするために 5 を 5 で除算しようとすることになります

于 2013-07-31T22:52:22.607 に答える