Цикл внутри цикла не запускается - PullRequest
0 голосов
/ 15 октября 2018

Этот код должен подсчитывать количество простых чисел на основе пользовательского ввода.Если пользовательский ввод 10, то я должен получить 4. Однако я получаю только 0. Почему второй цикл не запускается?

#include<stdio.h>
#include<math.h>
int main()
{
    int N;
    scanf("%d", &N);
    int numprime;
    numprime = 0;
    int P=1;
    for (P; P<N; P++)
    {
        if (P%2==0)
            continue;
        int e = sqrt(P);
        for (int j=3;j<=e;j+=2)
        {
            if (P%j!=0)
            {
                numprime = numprime + 1;
            }
            else
            {
                continue;
            }
        }
    }
    printf("%d", numprime);
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Почему второй цикл не запускается?

Он запускается один раз, когда e равно 3 (это означает, что это происходит, когда P равно9), в случае если ввод равен 10.

Измените это:

for (P; P<N; P++)

на это:

for (; P <= N; P++)

, поскольку первая часть не имела эффекта, ичто более важно, вы хотите проверить все N номера, поэтому необходимо было изменить условие остановки.

Затем вам нужно изменить это:

for (int j=3;j<=e;j+=2)

на следующее:

for(int j = 2; j <= e; j+=2)

для проверки простых чисел предлагается здесь .

Кроме того, вам нужно изменить это:

if (P % j != 0)

на это:

if (P % j == 0)

, поскольку P на самом деле является простым числом при выполнении условия.

Более того, вам необходимо избавиться от этого:

if(P % 2 == 0) continue;

поскольку, например, 2 - простое число, но оно удовлетворяет этому условию и не будет учитываться!

0 голосов
/ 15 октября 2018

По вашему коду, P начинается с 1, поэтому e равно sqrt(1), что снова 1, а j равно 3.Следовательно, j не меньше или равно 1, и проверка в верхней части внутреннего цикла завершается неудачей, поэтому цикл не выполняется в первый раз.Этот шаблон продолжается для каждой итерации внешнего цикла, пока P не станет достаточно большим, чтобы sqrt(P) было больше, чем 3, и в этот момент внутренний цикл работает.

...