模板題:p4213 【模板】杜教篩(sum)
ac code:(沒開o2優化過了,開了反而沒過,玄學優化233)
#include
#include
using namespace std;
//using namespace tr1;
typedef
long
long ll;
const
int maxn =
5e6;
bool isprime[maxn +5]
;int prime[maxn]
,cntp,mu[maxn]
;ll phi[maxn]
;tr1:
:unordered_map<
int,
int>mpu;
//代替map,加快速度
tr1:
:unordered_map<
int, ll>mpp;
void
init()
for(
int j =
1; j <= cntp && i * prime[j]
<=maxn;
++j)
phi[i * prime[j]
]= phi[i]
*(prime[j]-1
);mu[i * prime[j]]=
-mu[i];}
}for
(int i =
2; i <= maxn;
++i)
}int
calc_mu
(int x)
return mpu[x]
= res;
}ll calc_phi
(int x)
return mpp[x]
= res;
}int
main()
return0;
}
求t(n)的字首和,t(n)表示n的約數個數:
code:
#include
using namespace std;
typedef
long
long ll;
// 返回1->n每個數約數(因子)的個數和
// t = o(sqrt(n))
ll calc
(ll n)
return res;
}int
main()
return0;
}
積性函式線性篩
oi中有時需要我們線性篩某些函式,我們篩的主要是積性函式 1st 線性篩素數 include includeusing namespace std const int maxn 1e4 5 int n,prime maxn vis maxn tot void get prime int n int ...
積性函式字首和
最近突然做到一些求積性函式字首和的題,用到了各種篩,有一題用到 min 25 篩法,於是好好學習了一波,運用極不熟練。後來又遇到一道杜教篩的題,結果發現自己連 phi x 字首和都不會推了?嚇得我趕緊複習 寫部落格。常見 完全 積性函式 整除分塊 dirichlet 卷積 埃氏篩 這裡還是簡單介紹一...
積性函式篩法
很多常用的數論函式都是積性函式,而在題目中,我們常常需要線性 甚至更高 的篩法。對於積性函式,我們可以在篩素數的基礎上稍加修改,即可完成線性篩。首先,注意到積性函式的特點 f xy f x times f y 而可以線性篩的積性函式,需要知道以下兩個式子的快速求法 f p quad f p k p ...