Get Backup Pro 3 for Mac(mac資料備份同步工具) v3.6.5註冊啟用版
阿新 • • 發佈:2021-09-07
原理
基本思想 :
在埃氏篩法的基礎上,讓每個合數只被它的最小質因子篩選一次,以達到不重複的目的。
關鍵:
if(i%prime[j]==0)break;
理解:
- 當 i是prime[j]的倍數時,i = k × prime[j],
- 如果繼續運算 j+1,
-
- i × prime[j + 1] = prime[j] × k × prime[j+1]
- 這裡prime[j]是最小的素因子,當i = k × prime[j+1]時會重複,
- 所以跳出迴圈。
舉個例子 :
- i = 8 ,j = 1,prime[j] = 2,
如果不跳出迴圈,
- prime[j+1] = 3, 8 * 3 = 2 * 4 * 3 = 2 * 12,
在i = 12時會計算。
程式碼
bool visited[100100];//初始化 long long prime[100100];//儲存素數 int cnt; void Euler_prime() { memset(visited, true,sizeof (visited) ); visited[1]=false; for(int i=2;i<100100;i++) { if(visited[i]) prime[cnt++]=i; for(int j=0;j<cnt&&i*prime[j]<100100;j++) { visited[i*prime[j]] = false; if(i%prime[j]==0)//關鍵 break; } } }