2016-02-17 33 views
-1

我目前正在学习算法,并且遇到了面试官关于按顺序打印出第n个素数的函数的代码挑战。因此,这将是这样的:算法:打印第n个连续的素数

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

,但最让我发现打印出只是第n个号,所以23,或者只是那些如果是素数,将检测到的人的。我将冒风险为此,但我似乎无法找到正确的解决方案。

+4

开始通过读取现有的解决方案。更有可能的是,在确定23是第9个素数(根据定义1不是质数)的过程中,他们已经计算出其他8个素数,并将它们存储在一个数组中。你所需要做的就是现在打印这个数组。 – dasblinkenlight

回答

1

对于初学者来说,一个不是首要的。

其次,你的问题需要进一步澄清....

素数是没有挑战性 - 有大量的可用信息。

最简单的解决方案是简单地通过修改该数字的平方根来测试每个数字。如果它变为零,它不是素数。将素数一个接一个地存储在一个数组中。我不会直接向你提供答案,但请阅读更多有关埃拉托斯通斯筛 - 这是IMO非常低效,但你必须从哪里开始。

因此,所述第一原将在时隙0,第二次在时隙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