【持续更新】 用算法流程实现的代码块们

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

posted @ 2017-11-12 21:04  799  阅读(152)  评论(0编辑  收藏  举报