Я хочу взять число у пользователя, а затем напечатать, если оно простое или нет, но я не могу найти ошибку, где результат всегда не прост, и в чем проблема? - PullRequest
2 голосов
/ 10 февраля 2020

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

#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;
}

Ответы [ 3 ]

6 голосов
/ 12 февраля 2020

редактировать для успешной работы

#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;

}
3 голосов
/ 10 февраля 2020

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

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

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

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

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

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

0 голосов
/ 12 февраля 2020

Просто отметьте напоминание, будь то 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;

}
...