我正在尝试保存大于或等于输入数字的前20个素数。 现在的输出是997的20倍,因为值会覆盖以前的值。我不知道该怎么做来限制他们。当数组已满时,请停止循环或执行其他操作以免覆盖?
bool is_prime(int num) {
if (num < 2) {
return false;
}
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
void fillArr(int arr[20], int num) {
for (int index = num; index <= 1000; index++) { //don't know how to set up
//2nd condition, depends on entered number
if (is_prime(index)) {
//save first 20 prime numbers that are >= num into an array
//Code fills the array with every prime it finds, setting it for all
//values and overwriting any previous primes it has found. Right now
//output would be the same 20 prime numbers closest to index 1000,
//based on second condition
for (int i = 0; i < 20; i++) {
arr[i] = index;
}
}
}
//print test
for (int i = 0; i < 20; i++) {
std::cout << arr[i] << "\t";
}
}
int main() {
int arr[20];
int num;
std::cout << "Enter number: ";
std::cin >> num;
fillArr(arr, num);
return 0;
}
答案 0 :(得分:3)
在您的代码中,将i
初始化为0
。每次遇到素数时,将其添加到数组中并递增i
。在i >= 20
时中断。
void fillArr(int arr[20], int num) {
int i = 0;
for (int index = num; index <= 1000 && i < 20; index++) {
if (is_prime(index)) {
arr[i++] = index;
}
}
//print test
for (int i = 0; i < 20; i++) {
std::cout << arr[i] << "\t";
}
}
还请注意,这不是查找素数的最佳方法。要确定给定的数字是否为质数,只需要检查该数是否可以被质数除以该数字的平方根(直到n/2
为止)。您可能还需要阅读Seive of Eratosthenes。
也如注释中所述,最好使用std::vector
或std::array
而不是原始数组。在这种情况下,当向量的大小> = 20时,您只想push_back(index)
和break
。