應用:對很多整數進行素性測試-->要列舉n以內的素數
思路:2--n範圍內的所有整數,依次遍歷。遍歷過程中如果該數是素數則將其的倍數都劃去(可以想象他的倍數一定為非素數)。遍歷完成後。就可以列舉n以內的素數了。
模板:
void sieve(int n)
for(int i = 2;i<=n;i++)//依次遍歷}}
printf("%d\n",t);//素數的數量
}
模板題prime number aizu - 0009
#include#includeusing namespace std;
bool is_prime[1000100];
int main()
for(int i = 2;i<=n;i++)
}} printf("%d\n",t);
} return 0;
}
變換題+bfsprime path poj - 3126
#include#include#include#include#include#includeusing namespace std;
const int maxn = 10010;
bool book[maxn],prime[maxn];
int cnt[maxn],t[4],a,b,temp;
void is_prime2()//判斷是否是負數
} if(!flag)
prime[i] = true; }}
int bfs()
if(vtemp==b) return count[vtemp];
}t[j]=temp;
} if(v==b) return count[v];
} return -1;
}int main()
= \left (\left ( x ^ \right )^\right )*x" class="mathcode" src=""/>
偶數:模板:小白書例題uva10006 carmichael numbers
#include#include#includeusing namespace std;
bool is_prime[70000];
void prime()
} }}long long mod_pow(long long x,long long n,long long mod)
x = x*x%mod; //不斷進行反覆平方
n>>=1;//相當於n/=2;
} return res;
}int main()
for(int i = 2;i
}if(!flag)
else
}return 0;
}
埃式篩法 尤拉篩法
埃氏篩法是通過從小到大篩去乙個已知素數的倍數進而實現篩選的。假如我們想篩掉1 100間的所有合數,步驟如下 2是質數,篩掉所有2的倍數 3是質數,篩掉所有3的倍數 4不是質數,跳過 5是質數,篩掉所有5的倍數 6不是質數,跳過 7是質數,篩掉所有7的倍數 8不是質數,跳過 9不是質數,跳過 10不是...
篩法 尤拉篩和埃式篩(詳細至極)
首先,篩法是一種用來判斷質數的方法,可以刷出乙個質數表,所以也叫刷表法。基本思想 乙個整數的1以上且為整數倍是乙個合數。我們可以從小到大列舉n以內的質數,對其不超過n的倍數進行標記,剩下未標記的數即為質數。基本寫法 for int i 2 i n i 這時,我們會驚奇地發現時間複雜度很高。下面我們開...
埃氏篩法 素數篩
埃式篩法 給定乙個正整數n n 10 6 問n以內有多少個素數?做法 做法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去 以此類推,如果表中剩餘的最小的數是m,那麼m...