【持續更新】 用算法流程實現的代碼塊們

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

相關文章
相關標籤/搜索