代碼段1:計算約數定理中素數的冪數算法
for (int i=2; i * i < = x; i++){ if (x % i)continue; int times = 0; while (x % i == 0){ x /= i; times ++; } }
分析:用算法流程保證while 循環裏 i必定是質數
代碼段2:code
void Linear_Filter() { for (int i = 2; i * i <= N; i++) { if (!prime[i]) { prime[++prime[0]] = i; } for (int j = 1; j <= prime[0]; j++) { if (i * prime[j] > N) break; prime[i * prime[j] ] = 1; /// 18行: if (i % prime[j] == 0) break; /// 19 行: 若是18 和 19 換了位置則 i == prime[j] 狀況下的 i*prime[j]不會被標記 } } for (int i=1; i<= 20; i++) { printf("%d -> %d\n", i,prime[i]); } }
分析:第19行代碼:保證prime[j] <= i 的最小素因子,當剛好整除時爲i的最小素因子循環