此代码有什么问题?请帮助我 我输入9表示数字是素数 而输出实际上是条件的逆转...怎么办?
#include <stdio.h>
#include <conio.h>
int prime(int);
int main()
{
int num,res;
printf("\nENTER A NUMBER: ");
scanf("%d",&num);
res=prime(num);
if(num==1)
{
printf("Neither Prime nor Composite\n");
}
else
{
if(res==0)
printf("\n%d IS A PRIME NUMBER",num);
else
printf("\n%d IS NOT A PRIME NUMBER",num);
}
getch();
}
int prime(int n)
{
int i,p;
for(i=2;i<=n/2;i++)
{
if(n%i==0){
p=0;
} else {
p=1;
}
return p;
}
}
答案 0 :(得分:4)
return语句存在于循环中
int prime(int n)
{
int i,p;
for(i=2;i<=n/2;i++)
{
if(n%i==0){
p=0;}
else{
p=1;
}
return p;
}
}
因此,在循环的第一次迭代之后,该函数退出了。该函数不会检查其他除数。
例如,素数为2
的函数给出错误的结果。
当传递的参数等于例如1
时,该函数具有未定义的行为。
主要还是这种情况
if(res==0)
printf("\n%d IS A PRIME NUMBER",num);
也是错误的,因为假定该函数对于非素数返回0。
该函数的外观如下
int isprime( unsigned long long int x )
{
int prime = x % 2 == 0 ? x == 2 : x != 1;
for ( unsigned long long int i = 3; prime && i <= x / i; i += 2 )
{
prime = x % i != 0;
}
return prime;
}
另请参见我的个人论坛C function that determines whether a number is prime
尽管它是用俄语编写的,但是您可以使用Google服务“ translate”将其翻译成英文。