在c++素数生成器
Prime number generator in c++
本文关键字:c++ 更新时间:2023-10-16
根据我的理解,我已经使用除法器逻辑过滤出素数2,3,5,7,它工作得很好,但在我看来,这个逻辑会错过一些素数拾取,请帮助我找出这个逻辑的反例。
函数调用:generatePrime(200,10000);
// List of prime number between given range
int generatePrime(int start, int end){
long int diviser, *rangeList;
int count;
if(start <= end){
while(start <= end){
count = 0;
if((start != 2 && start%2 == 0 )|| (start != 3 && start%3 == 0) || (start!= 5 && start%5 == 0 )|| (start != 7 && start%7 == 0) ){
count = 1;
}
if(!count && start != 1){
cout << start << "n";
}
start++;
}
}
return 0;
}
工作示例:http://ideone.com/yOCBLd
您开发的算法遵循了一个完美的思想:所有可以因数化一个素数的数字(除了这个素数本身)都不是素数。然而,你只测试前4个素数。你需要测试所有的。解决方案是记录你找到的质数,并对它们进行全部测试。
// List of prime number between given range
int generatePrime(int start, int end){
int current_number = 2;
int all_primes [end-start];
int number_of_primes_found=0;
bool found;
if(start <= end){
while(current_number <= end){
found = false;
for (int i=0; i<number_of_primes_found; i++) {
int current_prime_to_test = all_primes[i];
if (current_number%current_prime_to_test == 0) {
all_primes[i+1] = start;
number_of_primes_found++;
found = true;
break;
}
}
if(found && current_number >= start){
cout << current_number << "n";
}
current_number++;
}
}
return 0;
}
我还将int count
更改为bool found
以简化事情,因为您实际上将其用作布尔值。如果你有任何问题,请告诉我!
相关文章:
- 没有找到相关文章