Нет, это не сработает! Попробуйте, например, 121 = 11 * 11
, который явно не простое число.
Для любого числа, данного вашей функции, которое является произведением простых чисел X1, X2, ..., Xn
(где n> = 2 ), причем все они больше или равны 11, ваша функция вернет правда. (А также, как уже говорилось, 9 не простое число).
Из википедии вы можете видеть, что:
В математике простое число (или простое число) - это натуральное число, которое имеет ровно два различных делителя натуральных чисел: 1 и себя.
поэтому очень простой и наивный алгоритм проверки, является ли число простым, может быть:
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;
}
Для лучших алгоритмов проверьте здесь: Проверка на примитивность
Если вы хотите проверить свой код, выполните test , вот тестовый пример, написанный в 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 };
}