Помимо того, что многие вещи в коде могут быть улучшены (например, именование, возвращаемые значения, p
и q
, ошибочно принятые в Main
), здесь кроется основная проблема. Вы увеличиваете i
до p/2
, и сразу после этого вы проверяете if (i == p)
, который никогда не будет верным (за исключением p = 0
)
static int Check_Prime(BigInteger p)
{
int i;
for (i = 2; i <= p /2; i++)
{
if (p % i == 0)
{
return 0; //not a prime number
}
}
if (i == p) // never true except p == 0
{
return 1;
}
return 0; // always returns 0
}
Просто удалите оператор if
и вернуть 1
.
static int Check_Prime(BigInteger p)
{
if (p <= 1) return 0;
for (int i = 2; i <= p /2; i++)
{
if (p % i == 0)
{
return 0; //not a prime number
}
}
return 1;
}