Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阿特金C和x2B筛+;实现不标记某些素数 我在C++中实现了Atkin的筛选器来返回一个类型为BoL的向量,但是它没有标记一些素数。_C++_Algorithm_Sieve Of Atkin - Fatal编程技术网

阿特金C和x2B筛+;实现不标记某些素数 我在C++中实现了Atkin的筛选器来返回一个类型为BoL的向量,但是它没有标记一些素数。

阿特金C和x2B筛+;实现不标记某些素数 我在C++中实现了Atkin的筛选器来返回一个类型为BoL的向量,但是它没有标记一些素数。,c++,algorithm,sieve-of-atkin,C++,Algorithm,Sieve Of Atkin,// Example program #include <iostream> #include <vector> std::vector<bool> listPrimes(int limit){ std::vector<bool> primes(limit); primes[2] = primes[3] = true; for(int i=1; i*i < limit; ++i){ for(int j=1; j*j

// Example program
#include <iostream>
#include <vector>

std::vector<bool> listPrimes(int limit){
  std::vector<bool> primes(limit);

  primes[2] = primes[3] = true;

  for(int i=1; i*i < limit; ++i){
    for(int j=1; j*j < limit; ++j){

      int n = (4*i*i) + (j*j);
      if (n <= limit && (n % 12 == 0 || n % 12 == 5 ))
        primes[n] = !primes[n];

      n = (3*i*i) + (j*j);
      if (n <= limit && n % 12 == 7 )
        primes[n] = !primes[n];

      n = (3*i*i) - (j*j);
      if ( i > j && n <= limit && n % 12 == 11 )
        primes[n] = !primes[n];
    }
  }

  for(int i=5; i*i < limit; ++i ){
    if(primes[i])
      for(int j=i*i; j < limit; j+=i*i)
          primes[i] = false;
  }

  return primes;
}

int main()
{
  std::vector<bool> primes = listPrimes(100);

  for(int i=0; i < 100; ++i)
    if(primes[i])
        std::cout << i << ", ";

    return 0;
}
//示例程序
#包括
#包括
标准::向量列表素数(整数限制){
向量素数(极限);
素数[2]=素数[3]=真;
对于(int i=1;i*i根据维基百科对“阿特金之筛”的描述,如果(n)…对于第一个
n
,您需要切换if
n mod 60∈ {1,13,17,29,37,41,49,53}
,但是如果
n%12==0 | | n%12==5
,你在每一步都会遇到类似的问题。我通过用C实现wikipedia伪代码得到了正确的答案,因此也许你可以将其作为一个模型,而不是你现在使用的任何东西