0

私の脳は明らかにすべてのシリンダーで発火しているわけではありませんが、数値が素数かどうかを検出するプログラムに取り組んでいました。以下のループは機能しますが、その理由がわかりません。素数 (test[k]) が 5 で i = 3 の場合。3 * 3 が 5 より大きい場合、ループが続くのはなぜですか?

        int [] test = new int[] {15,14,2,3,19,70,7,9,11,12,13,14,21,23,0,107};
int test2 = 7;


for(int k= 0; k <test.length; k++)
{
    boolean IsPrime= true;
    if(test[k]==2)
    {
        System.out.println(test[k] + " is a prime number");
        IsPrime = true;
        continue;
    }

    else if (test[k] % 2 == 0)
    {
        IsPrime = false;
        System.out.println(test[k] + " is NOT a prime number");
        continue;
    }

    else
        {
            for(int i = 3; i * i <= test[k]; i+= 2)
            {
                System.out.println(i);
                if(test[k] % i == 0)
                {
                    IsPrime =false;
                }
            }
                if(IsPrime == true)
                System.out.println(test[k] + " is a prime number");

                else
                {
                    System.out.println(test[k] + " is NOT a prime number");
                }
        }
}

}

4

1 に答える 1

3

ループは継続しませんが、期待どおりに機能します。
test[k] = 5 のコードを見てみましょう:

1) IsPrime = true (Line: 7)
2)  if (test[k] == 2) is false
3)  else if (test[k] % 2 == 0) is false
4)  we are in the else
4.1) i = 3
4.2) i*i <= 5 ? false
4.3) It does not go in the loop!
4.4) Is Prime == true is true;
--End--

さて、どこに問題がありますか?なぜそれがループに入ると思いますか?

于 2013-02-15T14:46:51.490 に答える