C++ C++;区间素数的算法

C++ C++;区间素数的算法,c++,algorithm,C++,Algorithm,我试图实现我的程序来检查一个数字是否是素数,方法是检查它是否不能被它前面的任何素数整除。作为一个样本素数,当primes.size()=0时,它的输入为2。但是,我的程序会打印2-100之间的所有数字 bool IsPrime(int number){ vector <int> primes; if(primes.size()==0){ primes.push_back(number); return t

我试图实现我的程序来检查一个数字是否是素数,方法是检查它是否不能被它前面的任何素数整除。作为一个样本素数,当primes.size()=0时,它的输入为2。但是,我的程序会打印2-100之间的所有数字

bool IsPrime(int number){
        vector <int> primes;
        if(primes.size()==0){
            primes.push_back(number);
            return true;
        }
        else{
            for(int i = 0; i<=primes.size()-1; ++i){
                if(number % primes[i]==0){
                    return false;
                }
            }
        }
        primes.push_back(number);
        return true;
    }

    int main(){
        for(int i = 2; i<=100; ++i){
            if(IsPrime(i)==true){
                cout << i << '\n';
            }
        }
    }
bool IsPrime(整数){
向量素数;
if(primes.size()==0){
素数。推回(数字);
返回true;
}
否则{

对于(int i=0;i而言,问题在于每次调用方法IsPrime()时,变量素数都是新的。 一旦完成return语句,它就会被删除


这意味着每次调用IsPrime()时变量素数将不包含任何内容。当您使用第一个If语句时,它的大小将始终为零,这意味着它将始终返回true。

素数
不是静态的,因此每次运行函数时都会得到一个新的空向量。您需要将
向量素数;
更改为
静态向量素数es;
素数
在检查其大小时始终为空。变量
素数
每次调用
IsPrime()
时向量重置。如果使
素数
为静态(
静态向量素数
)或者全局变量,您可以得到正确的答案。您可能会发现通过
IsPrime
函数查看它所命中的
return
语句很有启发性。进行一点调试,这样您就可以问一个更集中的问题。您是否尝试过任何调试?作为旁注,他可以将静态添加到该变量或传入变量能够或使其成为类方法。任何添加持久性的方法都可以。