((i%2==0)&&;(i%i==0)),该技术将不适用于生成素数c#

本文关键字:amp 适用于 不适用 生成素 i%i i%2 技术 | 更新日期: 2023-09-27 18:30:08

嗨!我试图生成一个素数,但我的条件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();

希望很快能收到你的来信。。。

((i%2==0)&&;(i%i==0)),该技术将不适用于生成素数c#

i为零时,第一次在循环中执行0 % 0,这会导致除以零的错误。

至于你的职能部门想做什么,我不知道。我在这里没有看到任何与素数有很大关系的东西。你只是找出了所有小于n的偶数。

让我们来看看if测试:

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

第二部分,只要i不是0i % i == 0将始终为真。所以那个部分是假的。而CCD_ 9只是简单地测试CCD_。

您的代码实际打算做什么?你在试着测试一个数字是否是素数吗?如果是这样,最简单的方法是这样的:

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);

需要说明的另一点是,您的代码版本将素性测试与I/O代码混合在一起。将它们混合在一个大例程中会使您更难理解和调试代码。如我在这里所示,将素性测试拆分为一个单独的函数,您可以更容易地检查它的正确性。一旦您知道它是正确的,您就可以从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();

更改

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

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

好吧,当i为0时,您正在尝试计算0%0,这实际上是一种除以零的尝试。

无论如何,除了当i为0时,i%i总是0。这几乎不是计算素数的方法。

%是模运算符。它给出了两个数字之间除法的余数。

(i % 2) == 0

将测试CCD_ 14是否为偶数。

(i % i) == 0

将总是为i > 0返回true,因为i / i = 1 remainder 0。当i0时,您将得到一个被零除的异常,因为您正在尝试计算0 / 0

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

要确定i是否为素数,您需要确保i,而不是可被2floor(i / 2)的所有整数整除。

很明显,因为您从0开始循环,所以应该从1开始循环。

在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;
}

当你检查素数no时:检查这个素数是什么。

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等范围内的素数。要做到这一点,你必须将素数检查循环放入另一个计数器循环中。