这可能是一个非常简单的问题需要解决,但由于某些原因我无法想到正确的解决方案!
我们有一个函数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循环会怎么样。任何帮助表示赞赏!提前谢谢。
答案 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;
}