C和is_prime中的素数

时间:2015-02-28 20:26:03

标签: c

我正在编写一个程序来查找用户输入n中包含的所有素数。我在使用is_prime功能时遇到问题。

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

main() {
  int n;
  int k;

  // gets user input for length of string
  // and stores it as n
  printf("Enter the value of n:");
  scanf("%d", &n);

  for (k = 2; k <= n; k++) {
    if (is_Prime(k) == 1) {
      printf("Printing primes less than or equal to %d: /n %d, &n, &k");
    }
  }

我希望输出看起来像这样,但我不知道如何在不使用每个素数的不同变量的情况下打印列表。

Printing primes less than or equal to 30:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29.


    //here is the is_Prime function
    is_Prime (int n)
    {
    for(j = 2; j <= n/2; j++)
    {
    if(n%j != 0)
    {
    return 1;
    break;
    }
    }
    if(n%j == 0 )
    return 0;
    }   

我不确定如何调用is_prime子例程?有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

printf("Printing primes less than or equal to %d:\n", n);
for(k = 2; k <= n; k++)
{
    if(is_Prime(k) == 1)
    {
        printf("%d, ", k);
    }
}

答案 1 :(得分:0)

printf("Printing primes less than or equal to %d:\n%s", n, (n >= 2 ? "2" : ""));

for (k = 3; k <= n; ++k)
  if (is_Prime(k))
    printf(", %d", k);

printf("%s\n", (n >= 2 ? "." : ""));

这里是你的is_Prime函数的一个稍微简洁的版本:

int is_Prime(int n)
{
  if (n < 2)
    return 0;

  int last = (int) sqrt(n) + 1;  /* conservatively safe */

  for (int j = 2; j <= last; ++j)
    if (0 == n % j)
      return 0;

  return 1;
}

请注意,您只需要检查一个数字的sqrt()即可找到所有潜在因素。

另请注意,这不是查找小于n的所有素数的好方法,这是程序的主要目的,尤其是当您每次重复调用此函数n递增1时。我建议您尝试实施Sieve of EratosthenesSieve of Sundaram - 只要n不是太大。