C++ C++;区间素数的算法
我试图实现我的程序来检查一个数字是否是素数,方法是检查它是否不能被它前面的任何素数整除。作为一个样本素数,当primes.size()=0时,它的输入为2。但是,我的程序会打印2-100之间的所有数字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
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
语句很有启发性。进行一点调试,这样您就可以问一个更集中的问题。您是否尝试过任何调试?作为旁注,他可以将静态添加到该变量或传入变量能够或使其成为类方法。任何添加持久性的方法都可以。