zoukankan      html  css  js  c++  java
  • 关于筛法

    关于素数,有埃氏筛法O(nloglogn),不过有更优的线性筛法,此线性筛法还可用于筛欧拉函数与莫比乌斯函数,作用很大

     1 int cnt;
     2 int prime[MAXN];
     3 int pri[MAXN];
     4 int phi[MAXN];
     5 int miu[MAXN];
     6 
     7 /* 素数筛 */
     8 void pre_prime(){
     9     mem(prime,0);
    10     cnt = 0;
    11     prime[0] = prime[1] = 1;
    12     for(int i = 2 ; i < MAXN ; i++){
    13         if(!prime[i]) pri[cnt++] = i;
    14         for(int j = 0 ; j < cnt && i * pri[j] <= MAXN ; j++){
    15             prime[i * pri[j]] = 1;
    16             if(i % pri[j] == 0) break;
    17         }
    18     }
    19 }
    20 /* 莫比乌斯筛 */
    21 void pre_miu(){
    22     mem(prime,0);
    23     cnt = 0;
    24     miu[1] = 1;
    25     for(int i = 2 ; i < MAXN ; i++){
    26         if(!prime[i]){
    27             miu[i] = -1;
    28             pri[cnt++] = i;
    29         }
    30         for(int j = 0 ; j < cnt && i * pri[j] <= MAXN ; j++){
    31             prime[i * pri[j]] = 1;
    32             if(i % pri[j] == 0){
    33                 miu[i * pri[j]] = 0;
    34                 break;
    35             }else miu[i * pri[j]] = -miu[i];
    36         }
    37     }
    38 }
    39 /* 欧拉筛 */
    40 void pre_phi(){
    41     mem(prime,0);
    42     cnt = 0;
    43     phi[1] = 1;
    44     for(int i = 2 ; i < MAXN ; i++){
    45         if(!prime[i]){
    46             phi[i] = i-1;
    47             pri[cnt++] = i;
    48         }
    49         for(int j = 0 ; j < cnt && i * pri[j] <= MAXN ; j++){
    50             prime[i * pri[j]] = 1;
    51             if(i % pri[j] == 0){
    52                 phi[i * pri[j]] = phi[i] * pri[j];
    53                 break;
    54             }else phi[i * pri[j]] = phi[i] * (pri[j] - 1);
    55         }
    56     }
    57 }
  • 相关阅读:
    博弈论--sg函数
    博弈论--nim博弈
    dp--bitset优化
    树--欧拉序
    树--dfs序
    树--dsu on tree
    树--树的重心
    单调队列
    单调栈
    dp--背包
  • 原文地址:https://www.cnblogs.com/zoewilly/p/6709139.html
Copyright © 2011-2022 走看看