Для цикла без каких-либо заявлений - PullRequest
0 голосов
/ 18 декабря 2018

Эта программа сообщает, является ли данный вход простым или нет, но я не понимаю, что именно здесь делает цикл for?В нем нет скобок и операторов.

int main(void)
{
    int n;

    printf("Enter an integer number (> 1): ");
    if (scanf("%d", &n) != 1 || n <= 1) {
        printf("Invalid input. Quit!\n");
        return -1;
    }

    int d;
    for (d = 2; n % d != 0; d++)
        ;

    if (d == n)
        printf("%d is prime\n", n);
    else
        printf("%d divides into %d\n", d, n);

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Цикл по-прежнему проверяет условие n % d != 0 и увеличивает d при каждом цикле.Как только n можно разделить на d без напоминания, d больше не будет увеличиваться и цикл завершится.Итак, у вас есть d.

. Затем вы можете определить, является ли число простым с условием: если найден коэффициент, найденный ниже n, он не прост.Главное, если бы не было другого фактора.

0 голосов
/ 18 декабря 2018

Ему не нужно тело, цель состоит в том, чтобы просто увеличить d до тех пор, пока условие n % d != 0 не станет ложным (то есть, когда n % d == 0 истинно).Во время этого процесса он ничего не делает с d.

В конце цикла d будет самым низким фактором n.Если d == n, это означает, что n не имеет никаких других факторов, кроме самого себя и 1 (что не проверяется, поскольку цикл начинается с d = 2), т. Е. Оно простое.

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