Функция, возвращающая 4 как простое число - PullRequest
0 голосов
/ 28 марта 2020

Я написал функцию для проверки, является ли число простым или составным. Что-то не так с этим. Возвращает 4 как простое число.

Нужна помощь в его исправлении

int c_sqrt(int nb)
{
    int i;

    i = 1;
    if (nb == 0)
        return (0);
    while (i * i < nb)
        i++;
    if ((nb % i) == 0)
        return (i);
    return (0);
}

int isPrime(int x)
{
    int i;
    int root;

    i = 2;
    root = c_sqrt(x);
    while (i++ <= root)
    {
        if (x % i == 0)
            return (0);
    }
    return (1);
}

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Ваш код не работает, потому что после строк ниже i становится 3 вместо 2.

i = 2;
root = c_sqrt(x);
while (i++ <= root)

Если вы измените местоположение увеличения i, как показано ниже, isPrime(4) будет в порядке

i = 2;
root = c_sqrt(x);
while (i <= root)
{
    if (x % i++ == 0)
        return (0);
}

Но у функции c_sqrt(int nb) также есть некоторая проблема со входом, подобным 8, поэтому вам также нужно это исправить.

/*
if ((nb % i) == 0)
    return (i);
return (0);
*/
return i;

Как и выше, нижняя часть вашего код на самом деле не нужен, достаточно просто вернуть i.

0 голосов
/ 28 марта 2020

Проблема while (i++ <= root). i начинается с 2, а ++ увеличивает его, так что в итоге вы прыгаете прямо к x % 3 и полностью пропускаете x % 2. Вы можете исправить это, выполнив while (i <= root) и добавив ++i; в конец тела l oop. В качестве альтернативы вы можете использовать for l oop вместо того, чтобы немного чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...