程序无法按预期运行,对于Prime和Non Prime

时间:2019-10-02 11:14:33

标签: c function primes definition

此代码有什么问题?请帮助我 我输入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;
    }

}

1 个答案:

答案 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”将其翻译成英文。