0

やあ!素数を生成しようとしていますが、条件によってi%iエラーが発生しています。

「ゼロで除算しようとしています」というエラーが表示されます。

どうすればこれを修正できますか??

int a, n, i;

Console.WriteLine("Enter ur number");

n = Convert.ToInt32(Console.ReadLine());

for (i = 0; i <= n; i++)
{
    if ((i % 2 == 0) && (i % i == 0))
    {
        a = i;
        Console.WriteLine("The prime numbers are", a);
    }
}

Console.ReadLine();

すぐにあなたから聞いてくれることを願っています...

4

6 に答える 6

13

がゼロの場合i、実行中のループを最初に実行する0 % 0と、ゼロ除算エラーが発生します。

あなたの機能が何をしようとしているのかについては、私にはわかりません。ここでは、素数に関連するものは何も見当たりません。より小さいすべての偶数を見つけているだけですn

ifテストを見てみましょう。

if ((i % 2 == 0) && (i % i == 0))

2 番目の部分は、そうでないi % i == 0限り常に true になります。だからその部分は偽物です。そして、偶数かどうかを単純にテストします。i0i % 2 == 0i

あなたのコードは実際に何をしようとしていますか? 数値が素数かどうかをテストしようとしていますか? もしそうなら、最も簡単なアプローチは次のようなものです:

static bool isPrime(int n)
{
    Debug.Assert(n>0);
    for (int i=2; i<n; i++)
        if (n % i == 0) // n is exactly divisible by i, so n is not prime
            return false;
    return true; // we could not find a factor, so n must be prime
}

Console.WriteLineへの呼び出しが正しくないため、現在のコードでは数値を出力できません。もしかして:

Console.WriteLine("The prime numbers are: {0}", a);

もう 1 つのポイントは、コードのバージョンが素数性テストを I/O コードと混合していることです。すべてを 1 つの大きなルーチンにまとめると、コードの理解とデバッグが難しくなります。ここで説明するように、素数性テストを別の関数に分割すると、その正確性をより簡単に確認できます。正しいことがわかったら、IO コードから使用できます。そして、IO コードを正しくすることに集中できます。これは次のようになります。

Console.Write("Enter your number: ");
int n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The prime numbers are:");
for (int i = 1; i <= n; i++)
    if (isPrime(i))
        Console.WriteLine(i);
Console.ReadLine();
于 2012-04-06T10:23:33.993 に答える
2

変化する

for (i = 0; i <= n; i++)

for (i = 1; i <= n; i++)
于 2012-04-06T10:23:30.670 に答える
1

%モジュラス演算子です。2 つの数値の除算の余りを返します。

(i % 2) == 0

iが偶数かどうかをテストします。

(i % i) == 0

は常に をtrue返しi > 0ますi / i = 1 remainder 0iがの場合0、 を評価しようとしているため、ゼロ除算の例外が発生します0 / 0

(参照: http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx )

iが素数かどうかを判断するには、 が からまでのすべての整数で割り切れないiことを確認する必要があります。2floor(i / 2)

于 2012-04-06T10:31:52.903 に答える
1

i が 0 のとき、あなたは を計算しようとしていますが0%0、これは実際には 0 で割ろうとする試みです。

とにかく、i が 0 の場合を除いて、i%i は常に0 です。素数を計算する方法はほとんどありません。

于 2012-04-06T10:24:16.800 に答える
0

Cで素数を見つけるためのキッズプログラムは

#include<stdio.h>

main()
{
   int n, c = 2;

   printf("Enter a number to check if it is prime\n");
   scanf("%d",&n);

   for ( c = 2 ; c <= n - 1 ; c++ )
   {
      if ( n%c == 0 )
      {
         printf("%d is not prime.\n", n);
     break;
      }
   }
   if ( c == n )
      printf("%d is prime.\n", n);

   return 0;
}

素数をチェックするとき:これを素数とは何かをチェックします

Prime number are those which will not divided by any number except 1 and itself.

ステートメントによると、チェック番号は2からN-1までで始まる必要があります。

 bool isPrime = true;
            int number = Convert.ToInt32(Console.Read());
            int i = 2;
            while (i < number)
            {
                if (number % i == 0)
                {
                    isPrime = false;
                    break;
                }
                i++;
            }

            if (isPrime)
            {
                //Prime number
            }
            else
            {
                //Not Prime No
            }

これをチェックして、1〜100の範囲などの素数を生成する方法を知ってください。そうするには、素数チェックループを別のカウンターループ内に配置する必要があります。

于 2012-04-06T10:46:16.637 に答える
0

ループを 0 から開始しているため、明らかです。ループは 1 から開始する必要があります。

于 2012-04-06T10:25:11.073 に答える