0

関数 isprime (素数でない場合は 0、素数の場合は 1) から値 1 または 0 を返していますが、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 に答える