我从函数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;
}
}
答案 0 :(得分: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;
}
}
看看这个算法:Sieve of Eratosthenes
答案 1 :(得分:0)
这个答案是对的。
为了消除这种错误,请使用
if(1=x)
使用这种方法可以避免这种行为。
这里我只是为了避免拼写错误。