c ++中的素数生成器

时间:2014-08-03 04:26:30

标签: c++

我已经使用分频器逻辑来过滤素数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

1 个答案:

答案 0 :(得分:2)

您开发的算法遵循完美的想法:所有可以考虑素数的数字(除了素数本身)都不是素数。但是,您只测试前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以简化操作,因为您基本上将它用作布尔值。如果您有任何问题,请告诉我们!