在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以简化事情,因为您实际上将其用作布尔值。如果你有任何问题,请告诉我!

相关文章:
  • 没有找到相关文章