[洛谷P5106]dkw的lcm:尤拉函式+容斥原理+擴充套件尤拉定理
阿新 • • 發佈:2018-12-18
分析
考慮使用尤拉函式的計算公式化簡原式,因為有:
\[lcm(i_1,i_2,...,i_k)=p_1^{q_{1\ max}} \times p_2^{q_{2\ max}} \times ... \times p_m^{q_{m\ max}}\]
其實就是分解質因數,丟到那個尤拉函式計算式子裡:
\[\varphi(lcm(i_1,i_2,...,i_k))=\prod (p_i-1)p_i^{q_{i\ max}-1}\]
容易發現可以分開討論每個質數,計算每個\(p_i^j\)在多少種\(i_1 \sim i_k\)的取值方案中作為某一項的倍數出現,這裡可以容斥做,然後把產生的貢獻乘到答案裡即可。質數取模的話,不是有擴充套件尤拉定理嘛,模個\(1e9+6\)
時間複雜度?不知道,大概在\(O(n) \sim O(nlogn)\)之間吧。
程式碼
int main(){ n=read(),k=read(); pre_process();//這個是篩質數 int tot=qpow(n,k,MOD-1); rin(i,1,cnt){ int p=prm[i],temp=n/p; ans=1ll*ans*qpow(p-1,(tot-qpow(n-temp,k,MOD-1)+MOD-1)%(MOD-1),MOD)%MOD; while(1){ temp/=p;if(!temp) break; ans=1ll*ans*qpow(p,(tot-qpow(n-temp,k,MOD-1)+MOD-1)%(MOD-1),MOD)%MOD; } } printf("%d\n",ans); return 0; }