Я хочу взять число от пользователя, а затем распечатать, если это простое или нет, но я не могу найти, что является ошибкой, где результат всегда не прост, так в чем проблема ??
#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 ответа
Редактировать, чтобы работать успешно
#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;
}
Взгляните на условие цикла здесь:
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)
.
Просто отметьте напоминание, будь то 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;
}
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.