Я хочу взять число от пользователя, а затем распечатать, если это простое или нет, но я не могу найти, что является ошибкой, где результат всегда не прост, так в чем проблема ??

#include <stdio.h>

int main(void) 
{

    int number;
    char flag = 0;

    printf("Please enter the number:");
    scanf("%d",&number);

    for (int i = 1; i <= number; i++) { 
        if (number %i == 0) {
            flag = 1;
            break;
        }
    }

    if (number==1)
        printf("%d neither prime nor not prime", number);

    if (flag==1)
        printf("%d is not prime",number);
    else
        printf("%d is prime",number);

    return 0;
}
0
sara hamdy 10 Фев 2020 в 13:36

3 ответа

Лучший ответ

Редактировать, чтобы работать успешно

#include <stdio.h>

int main(void) 
{

int number ;
char flag=0;
printf("please enter the number:");
scanf("%d",&number);

for(int i=2;i<number;i++)
{ 
   if(number%i==0)
   {
     flag=1;
     break;
    }
}

if (number==1)
      { printf("%d neither prime nor not prime", number);}
else if (flag==1)
     { printf("%d is not prime",number);}
else
      { printf("%d is prime",number);}

  return 0;

}
6
sara hamdy 12 Фев 2020 в 08:11

Взгляните на условие цикла здесь:

for(int i=1;i<=number;i++)

С <= i поднимается до number. Поэтому последняя проверка будет if(number%number==0), что всегда верно: ваша программа говорит, что 5 не является простым числом, потому что 5, разделенный на 5, имеет остаток {{X7} } . То же самое относится к делению числа на 1 (что также приводит к отсутствию остатка), поэтому эта проверка должна начинаться с 2. Эта строка должна быть:

for(int i=2;i<number;i++)

Как правило, i должен идти только до sqrt(number), потому что никакие два числа больше, чем умноженный корень number, не приведут к number.

Кроме того, если введено число 1, вы получите два из трех возможных выходных данных вместо только первого. Чтобы это исправить, поставьте else перед if (flag == 1).

3
Blaze 10 Фев 2020 в 10:59

Просто отметьте напоминание, будь то 0 или 1, если в конце вы поделите какое-либо число, в напоминании будет 0 или 1. Если напоминание равно 1, то число простое или 0 не простое.

 #include <stdio.h>

 int main(void) 
{

int number ;
char flag=0;
printf("please enter the number:");
scanf("%d",&number);


if((number>2)&&(number%2==0))
{
 flag=1;

}
if (number==1)
{ printf("%d neither prime nor not prime", number);}
if (flag==1)
{ printf("%d is not prime",number);}
else
 { printf("%d is prime",number);}
   return 0;

}
0
Liaquat Hussain 12 Фев 2020 в 06:40