代码段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的最小素因子循环