C程序打印1-300的所有素数

时间:2017-01-02 04:22:02

标签: c

我已经为C编写了这段代码来打印1-300的素数

GNU GCC编译器显示以下错误:

  

错误:二进制%的操作数无效(有'double'和'int')

if (sqrt(num) == 0 || sqrt(num) % 2 != 0)

我的代码是:

#include <stdio.h>
#include <math.h>

int main() {
  /*Created by Suvid Singhal                       Date:- January 2, 2017*/
  int num;
  printf("Welcome to 1-300 prime numbers C Program!!!");
  for (num = 0; num <= 300; num++) {
    if (sqrt(num) == 0 || sqrt(num) % 2 != 0) {
      printf("%d\n", num);
    } else {
      continue;
    }
  }
  return 0;
}

4 个答案:

答案 0 :(得分:4)

你的答案中有很多问题。

让我们逐一检查。

  • 您对素数的看法尚不清楚。除了数字和1之外,素数没有除数。(1不是素数)。

如何检查数字是否为素数?

您可以检查(x)的所有`数字&lt; =平方根。所以你需要检查某人(除了1)是否划分了这个号码。如果是,则它不是其他原则。

实施细则

int check= 0;
for(int i=2;i<=(int) sqrt(x);i+=1)
  if(n%i == 0)
  { 
     check = 1;
     n is non-prime;
     break; // no need to check 
  }
if(check == 0)
  n is prime

sqrt()返回double并......

模仿可以应用于int,因此您必须将其强加于此。

如果你想避免全部

for(int i=2;i*i<=x;i++)
...

为了你学习

了解筛选方法以获得素数。对于300个数字可能并不重要,但如果它是10000000,那么你肯定想要读一读。

答案 1 :(得分:0)

%运算符用于整数。您可能希望使用fmod()或整数强制转换。

if ( sqrt( num ) == 0 || fmod( sqrt( num ), 2 ) != 0 )

if ( sqrt( num ) == 0 || (int) sqrt( num ) % 2 != 0 )

这应该可以解决您的编译错误。

ps:如果您正在寻找一种生成素数的绝佳方法,请参阅Sieve of Erastosthenes

答案 2 :(得分:0)

在您提供的代码示例中,您不清楚如何确定数字是否为素数。您有以下条件if (sqrt(num) == 0 || sqrt(num) % 2 != 0)显然确定一个数字为素数。但是这种情况在语法上是无效的。正如其他人所指出的那样,你不能对sqrt函数返回的非int数进行模运算。您认为,操作sqrt(num) % 2返回了什么价值?它对一个数字是素数有什么作用?您对continue的使用也不重要。也许你在breakcontinue之间有点困惑。我给你一个示例程序。试着从中了解你的错误:

int isPrime = 1;
for(int i=2;i<=300;i++) {
    isPrime = 1;
    for(int j=2; j!=i && j <= ceil(sqrt(i));j++) {
        if(i%j == 0) {
            //Not a prime number
            isPrime = 0;
            break;
        }
    }
    if(isPrime) {
        printf("%d\n", i);
    }
}

答案 3 :(得分:-1)

更改

if( sqrt(num) == 0 || sqrt(num) % 2!=0 )

if( sqrt(num) == 0 || (int)sqrt(num) % 2!=0 )

应该修复编译错误。有关详细信息,请参阅error: invalid operands to binary % when taking modulus of float

相关问题