【发布时间】:2013-03-22 12:18:07
【问题描述】:
我想问一下这是否是检查数字是否为素数的正确方法?因为我读到 0 和 1 不是质数。
int num1;
Console.WriteLine("Accept number:");
num1 = Convert.ToInt32(Console.ReadLine());
if (num1 == 0 || num1 == 1)
{
Console.WriteLine(num1 + " is not prime number");
Console.ReadLine();
}
else
{
for (int a = 2; a <= num1 / 2; a++)
{
if (num1 % a == 0)
{
Console.WriteLine(num1 + " is not prime number");
return;
}
}
Console.WriteLine(num1 + " is a prime number");
Console.ReadLine();
}
【问题讨论】:
-
是的,素数被定义为大于一。
-
would just like to ask if this is a correct way of checking- 是的。也许您想问一下这是否是一种有效的检查方式? -
不。简单地说,您可以从 3 开始
a并将其增加 2 而不是 1(并且句柄 2 作为特殊情况是素数)。但请看这里:en.wikipedia.org/wiki/Sieve_of_Eratosthenes -
@MatthewWatson 如果想要生成所有质数到某个限制,那么筛子很好,但是要检查一个数是否是质数,它是没用的。
-
@Servy “如果它足够小,它甚至不会低效”是什么意思?如果您筛分到
sqrt(n)以获得试除法所需的素数,如果您避免使用 2、3 甚至 5 的倍数(如果您是进取心的话),那么筛分比不必要的复合除法工作量更大。如果您要筛分到n以查找n是否是筛子中的素数,那么您的算法会逐渐变差(并且常数因子也不会让它在小数中获胜)。
标签: c# primes primality-test