[英]Getting a Segmentation Fault: 11. I Have Seen Other Posts, but I Don't Know How I Can Add Memory to my Program
这段代码试图检查数字是否为质数,我知道有使用数字集的更有效方法,但是我只是想让它起作用,但是出现了分段错误。
如果您想测试代码,当我插入10000877或更大的数字时,它会发生在我身上。
#include <math.h>
#include <iostream>
int main () {
int prime/*???*/;
std::cout << "Please input a number: ";
std::cin >> prime;
bool isPrime = true;
int biggestFactor = ceil((prime^(1/2)));
bool odd = prime%2 == 1 ? true : false;
int multiple = 0;
int ranges[biggestFactor];
bool boolean = false;
for(int i = biggestFactor; i!=1; i--) {
ranges[i-2] = ceil(prime / i);
}
if(odd) {
for(int i = 1; i<prime; i++) {
if(multiple > biggestFactor) {
break;
} else if(boolean) {
} else if(i* ranges [multiple] > prime) {
multiple++;
} else if(i*ranges[multiple] == prime) {
isPrime = false;
break;
}
}
} else {
if(prime != 2) {
isPrime = false;
}
}
if(isPrime) {
std::cout << "That number is prime." << std::endl;
} else {
std::cout << "That number is composite." << std::endl;
}
}
除了prime ^(1/2)不是素数的平方根这一事实外,您的代码(即使是错误的)也可以工作。 您只是通过使用素数来高估平方根(1/2转换为int,即为0,对其进行XOR运算)。
我尝试过,它只适用于少量数字。
现在,由于数量众多,您的内存不足,尝试分配4 * 10000877字节
int ranges[biggestFactor];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.