算法:打印第n个连续素数

时间:2016-02-17 03:43:32

标签: algorithm primes

我目前正在学习算法,并且遇到了来自面试官的代码挑战,该代码挑战了一个按顺序打印出第n个素数的函数。所以它会是这样的:

getPrimeNth(10)将打印1 2 3 5 7 11 13 17 19 23

但是我找到的大部分内容都会打印出第n个数字,所以23或只会检测它是否为素数。我将冒险为此投降,但我似乎找不到合适的解决方案。

2 个答案:

答案 0 :(得分:1)

对于初学者来说,一个不是素数。

其次,你的问题需要更多澄清......

Primes并不具有挑战性 - 有很多可用信息。

最简单的解决方案是简单地通过修改该数字的平方根来测试每个数字。如果它mod为零,它不是素数。将质数一个接一个地存储在一个数组中。我不打算直截了当地给你答案,但是阅读更多关于Eratosthenes的筛子 - 这是非常低效的IMO,但你必须从哪里开始。

因此,第一个素数将在时隙0中,第二个在时隙1中,等等。

答案 1 :(得分:0)

以下代码尝试查找并保存所有可能的素数到N(由宏定义)。它只调用效用函数is_prime(),它检查给定的数字是否为素数。

#define TRUE   1
#define FALSE  0
#define N 10

typedef short int bool;

bool is_prime(int num)
{
    int i = 2;

    for (i = 2; i <= (num - 1); i++) {
        if ((num % i) == 0) {
            return FALSE;
        }
    }
    return TRUE;
}


int main()
{
    int primes[N];
    int num_primes = 0;
    int num = 2; /* start with 2 */

    while (num_primes != N) {
        if (is_prime (num) == TRUE) {
            primes[num_primes] = num;
            num_primes++;
        }
        num++;
    }

    int i = 0;
    for (i = 0; i < N; i++) {
        printf ("%d ", primes[i]);
    }
    printf ("\n");

}
  

输出:2 3 5 7 11 13 17 19 23 29