如何用前10个素数填充数组?

时间:2013-12-09 02:55:59

标签: c arrays for-loop

这可能是一个非常简单的问题需要解决,但由于某些原因我无法想到正确的解决方案!

我们有一个函数int isPrime(int n),如果n是素数则返回2,如果n不是正数则返回-1,如果n不是素数则返回0。 (我们不必为此函数编写任何代码,我们只是假设代码已经编写,所以我们所要做的就是调用这个函数)。使用这个函数,我们必须编写一个代码片段,用前十个素数填充一个大小为10的整数数组。注意:将1视为非素数。

我尝试过以下解决方案,但我不认为这是正确的: 注意:我们只需要编写代码片段!

int a[10];
int n, i, result;

result = isPrime(n);

   for (i = 0; i < 10; i++) {
      if (result == 1) {
         a[i] = n;
      }
   }

我有一种感觉,我必须使用两个for循环,一个循环使用isPrime检查的数字,另一个循环遍历数组中的位置,如上所述。但是我不知道如果我有两个for循环会怎么样。任何帮助表示赞赏!提前谢谢。

3 个答案:

答案 0 :(得分:2)

从零素数开始。虽然你没有10个,但看看下一个数字是否为素数;如果是的话,将其添加到数组中的下一个位置(如果是的话)(现在你还有一个素数)。

(这直接转换为代码。你需要一个循环,但需要两个不同的计数器:找到的素数,你接下来要测试的数量)

答案 1 :(得分:2)

尝试这样的事情。它将重复找到下一个素数,直到找到其中的10个。 注意:由于您未提供isPrime的实现,因此未对此代码进行测试。它只是为了让你知道它应该是什么样子。

int a[10];
int n, i, result;

n = 2;
for (i = 0; i < 10; i++) {
    // Keep bumping n until we find a prime.
    while (!(isPrime(n) == 2)) {
       n++;
    }

    // Record the prime we just found.
    a[i] = n;

    // Ensure that we do not just record the same prime n times.
    n++;
}

答案 2 :(得分:0)

Amaden算法的实现:

int a[10];
for (int n = 1, nprimes = 0;;)
    if (isPrime(++n) == 2) {
        a[nprimes++] = n;
        if (nprimes == 10)
            break;
    }