我正在创建一个程序,用户输入一个介于2和1000000之间的正整数,如果是素数,则打印"该数字是素数"如果它不是素数,则打印数字的分解。每当我输入一个素数(即:3)时,它会打印出它是一个素数,但是在这段时间之后它会再次打印这个数字(即:数字3是一个素数.3)。我似乎无法找到为什么会发生这种情况,有谁知道我在哪里犯了错误?
#include <stdio.h>
int main()
{
int N, i, div, flag=0;
printf("Please enter a positive integer: ");
scanf("%d",&N);
for(i=2;i<=N/2;++i)
{
if(N%i==0)
{
flag=1;
break;
}
}
if (flag==0)
printf("The number %d is a prime number.", N);
else
printf("The number %d is not a prime number.\nThe prime factors of %d are:",N, N);
div = 2;
while(N!=0){
if(N%div!=0)
div = div + 1;
else {
N = N / div;
printf("%d ",div);
if(N==1)
break;
}
}
return 0;
}
答案 0 :(得分:0)
这种情况正在发生,因为即使它是素数,后来的while
循环也会被执行。这会打印3
,这是通过此声明
printf("%d ",div);
要停止此操作,您可以在while循环中添加另一个检查,如果它是素数,将阻止它进入。
while(N!=0 && flag==1) //flag will be 1 if the number is not prime, and factors are present
或者,您可以将其他部分保留在`else语句中,例如
if (flag==0)
printf("The number %d is a prime number.", N);
else
{
printf("The number %d is not a prime number.\nThe prime factors of %d are:",N, N);
div = 2;
while(N!=0){
if(N%div!=0)
div = div + 1;
else {
N = N / div;
printf("%d ",div);
if(N==1)
break;
}
}
}
答案 1 :(得分:0)
您忘记了else
声明的括号。所以else(不是素数)仅适用于printf
。
其余的总是被执行,无论是否为素数。