((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
为零时,第一次在循环中执行0 % 0
,这会导致除以零的错误。
至于你的职能部门想做什么,我不知道。我在这里没有看到任何与素数有很大关系的东西。你只是找出了所有小于n
的偶数。
让我们来看看if
测试:
if ((i % 2 == 0) && (i % i == 0))
第二部分,只要i
不是0
,i % 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
。当i
是0
时,您将得到一个被零除的异常,因为您正在尝试计算0 / 0
。
(另请参见:http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx)
要确定i
是否为素数,您需要确保i
是,而不是可被2
到floor(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等范围内的素数。要做到这一点,你必须将素数检查循环放入另一个计数器循环中。