我正在尝试保存大于或等于输入数字的前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;
}
最佳答案
在您的代码中,首先将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
而不是原始数组。在这种情况下,当 vector 的大小> = 20时,您只想push_back(index)
和break
。关于c++ - 将前n个质数保存在数组中而不会覆盖它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56383171/