Для цикла не делать то, что предполагалось - PullRequest
0 голосов
/ 12 марта 2019

Это цикл for для печати простых чисел в заданном диапазоне и в конце печати, сколько простых чисел было в заданном диапазоне.Программа также печатает 1 как простое число.

Программа:

#include <stdio.h>
int main(){
    int a,b,k,c,s=0;

    printf("Enter the start : ");
    scanf("%d",&a);
    printf("Enter the end : ");
    scanf("%d",&b);

    for( ;a<=b;a++){
    k = 1;
        for(c=2;c<=a/2;c++){
            if(a%c==0) {
                k-=1;
                break;
            }
            else
                continue;
        }
        (k!=0)?(printf("%d ",a),s+=1):printf("");
    }
    printf("\nNo. of Primes : %d",s);
    return 0;
}

Вывод:

Enter the start : 1
Enter the end : 25
1 2 3 5 7 11 13 17 19 23 
No. of Primes : 10

Я хочу знать, как изменить код, чтобы получить только простые числа.

Ответы [ 2 ]

3 голосов
/ 12 марта 2019

В результате вы получите 1, потому что вы установили

k = 1;

и следующий цикл

for(c=2;c<=a/2;c++){
...

не изменит это, если a равно 1, потому чтоc <= a не выполняется.

Заменить

k = 1;

на

if(a > 1) k = 1;
else k = 0;

Код в цикле

    for(c=2;c<=a/2;c++){
        if(a%c==0){
        k-=1;break;}
        else continue;
    }

- битстранно.

Вместо k-=1; я бы написал k=0;, потому что ясно, что вы хотите, чтобы значение стало 0.Вы можете удалить else continue;, потому что это то, что цикл будет делать в любом случае.

1 голос
/ 12 марта 2019

Ваш код, который проверяет простое число, также будет проходить для числа 1.Внутренний цикл for в этом случае не вводится, поэтому k никогда не устанавливается на ноль, а строка (k != 0) ? (printf("%d ", a), s += 1) : printf(""); принимает истинную ветвь.

Простое исправление:

(k != 0 && a != 1) ? ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...