阿特金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
,您需要切换ifn mod 60∈ {1,13,17,29,37,41,49,53}
,但是如果n%12==0 | | n%12==5
,你在每一步都会遇到类似的问题。我通过用C实现wikipedia伪代码得到了正确的答案,因此也许你可以将其作为一个模型,而不是你现在使用的任何东西