0

我从函数 isprime 返回值 1 或 0(当它不是素数时为 0,当它是素数时为 1)但是当我打印 x 的返回值(isprime 的返回值)时,它与我从 isprime 返回的不同。为什么?

#include<stdio.h>
int isprime(int b);

main()
{
    int a,rem,i;

    printf("enter the number");
    scanf("%d", &a);

    for(i = 1; i < a; i++)
    {

        rem = a % i;
        if(rem == 0)
        {
            int x = isprime(i);
            printf(" value of x returned for i = %d is  %d", i, x);
            if(x = 1)
            {
                printf("%d\n", i);
            }
        }
    }
        return (0);
}

/**
 *
 *returns 1 if b is prime else returns 0
 */

int isprime(int b)
{
    int x, count = 0;
    printf("input recieved %d \n", b);
    for(x = 1; x <= b;  x++)
    {
        if (b % x == 0)
        {
            count = count + 1;
        }
        printf("the value of count is %d\n", count);
    }
    if(count == 2) {
        printf("returning the value as 1\n");
        return 1;
    }
    else {
        printf("returning the value as 0\n");
        return 0;
    }
}
4

2 回答 2

4
if(x = 1)

=是赋值。您需要==运营商。if不过,您在其他条件下做得正确。

此外,计算素数的逻辑效率低下。一旦计数大于 2,您就可以中断循环。

if (b % x == 0)
{
    count = count + 1;
    if (count > 2)
    {
       // This ensures you are returning correct value later.
       break;
    }
}

看看这个算法:埃拉托色尼筛

于 2013-09-07T17:59:38.740 回答
0

这个答案是正确的。

为了消除此类错误,请使用它

if(1=x)

使用这种方法可以避免这种行为。

在这里,我只是为了避免拼写错误。

于 2013-09-07T18:04:36.260 回答