おそらくあなたのコードは、ごちゃごちゃしていて無意味に見える大量のメッセージを出力しているのではないでしょうか? 重要な問題は 3 つあります。
素数にできないと判断した場合、for ループから抜け出すことはできません。
素数ではない場合でも素数であると想定しています。以下のコードのコメントを参照してください。
a 自体と比較していて、それは常に a で割り切れます。for 条件の <= は < である必要があります。
コード:
int a = Convert.ToInt32(number);
if (a % 2 != 0)
{
for (int i = 3 i < a; i += 2) // we can skip all the even numbers (minor optimization)
{
if (a % i == 0)
{
Console.WriteLine("not prime");
goto escape; // we want to break out of this loop
}
// we know it isn't divisible by i or any primes smaller than i, but that doesn't mean it isn't divisible by something else bigger than i, so keep looping
}
// checked ALL numbers, must be Prime
Console.WriteLine("prime");
}
else
{
Console.WriteLine("not prime");
}
escape:
Console.ReadLine();
他の人が述べたように、平方根を評価して次の行を置き換えることにより、a の平方根にループすることしかできません。
for (int i = 3 i < a; i += 2)
これとともに:
float sqrRoot = (Int)Math.Sqrt((float)a);
for (int i = 3 i <= sqrRoot; i += 2)
各反復には平方根演算が含まれるため、評価を行うことが重要です。
gotoステートメントが気に入らない場合(私はgotoステートメントが大好きです)、コメントを投稿してください。ブレークアウトブール値に置き換えます(または、Dukelingの最近の回答を参照してください)。