素数公式 [英] Prime Number Formula
问题描述
我正在尝试在C#中编写素数函数,并且想知道以下代码是否有效. 似乎"可以使用前50个左右的数字.我只是想确保无论数量多少,它都可以使用:
I am trying to write a prime number function in C# and I am wondering if the follow code will work. It "appears" to work with the first 50 numbers or so. I just want to make sure it will work no matter how big the number is:
static bool IsPrime(int number)
{
if ((number == 2) || (number == 3) || (number == 5) || (number == 7) || (number == 9))
return true;
if ((number % 2 != 0) && (number % 3 != 0) && (number % 5 != 0) &&
(number % 7 != 0) && (number % 9 != 0) && (number % 4 != 0) &&
(number % 6 != 0))
return true;
return false;
}
推荐答案
不行!例如,尝试使用121 = 11 * 11
显然不是素数.
No it won't work! Try 121 = 11 * 11
for example which obviously isn't a prime.
对于赋予函数的任何数字,它是质数X1, X2, ..., Xn
(其中 n> = 2 )的乘积,所有质数均大于或等于11,则您的函数将返回true. (而且,正如已经说过的,9不是素数.)
For any number given to your function, that is a product of the prime numbers X1, X2, ..., Xn
(where n >= 2) with all of them being greater or equal to 11, your function will return true. (And also, as already said, 9 isn't a prime).
从Wikipedia中,您可以看到:
From wikipedia you can see that:
在数学中,素数(或素数)是一个自然数,它具有两个截然不同的自然数除数:1和它本身.
In mathematics, a prime number (or a prime) is a natural number that has exactly two distinct natural number divisors: 1 and itself.
因此,一种非常简单且幼稚的用于检查数字是否为质数的算法可能是:
so a very simple and naive algorithm on checking whether a number is prime could be:
public bool CalcIsPrime(int number) {
if (number == 1) return false;
if (number == 2) return true;
if (number % 2 == 0) return false; // Even number
for (int i = 2; i < number; i++) { // Advance from two to include correct calculation for '4'
if (number % i == 0) return false;
}
return true;
}
有关更好的算法,请点击此处: Primality Test
For better algorithms check here: Primality Test
If you want to check your code, do inlcude a test, here's a test case written in xunit.
[Theory]
[MemberData(nameof(PrimeNumberTestData))]
public void CalcIsPrimeTest(int number, bool expected) {
Assert.Equal(expected, CalcIsPrime(number));
}
public static IEnumerable<object[]> PrimeNumberTestData() {
yield return new object[] { 0, false };
yield return new object[] { 1, false };
yield return new object[] { 2, true };
yield return new object[] { 3, true };
yield return new object[] { 4, false };
yield return new object[] { 5, true };
yield return new object[] { 6, false };
yield return new object[] { 7, true };
yield return new object[] { 8, false };
yield return new object[] { 9, false };
yield return new object[] { 10, false };
yield return new object[] { 11, true };
yield return new object[] { 23, true };
yield return new object[] { 31, true };
yield return new object[] { 571, true };
yield return new object[] { 853, true };
yield return new object[] { 854, false };
yield return new object[] { 997, true };
yield return new object[] { 999, false };
}
这篇关于素数公式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!