【持续更新】 用算法流程实现的代码块们
代码段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:
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的最小素因子