繁体   English   中英

遇到分段错误:11.我看过其他帖子,但不知道如何在程序中添加内存

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM