日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Loj#6247-九个太阳【单位根反演】

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Loj#6247-九个太阳【单位根反演】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://loj.ac/p/6247


題目大意

給出n,kn,kn,k
∑0≤i≤n,i∣k(ni)\sum_{0\leq i\leq n,i|k}\binom{n}{i}0in,ik?(in?)
998244353998244353998244353取模

1≤n≤1015,1≤k≤220,k=2p(p∈N)1\leq n\leq 10^{15},1\leq k\leq 2^{20},k=2^p(p\in N)1n1015,1k220,k=2p(pN)


解題思路

隨便找的一題竟然是單位根反演,不過很基礎而且很裸。

首先單位根反演的式子[i∣k]=1k∑j=0k?1ωki×j[i|k]=\frac{1}{k}\sum_{j=0}^{k-1}\omega_k^{i\times j}[ik]=k1?j=0k?1?ωki×j?

然后帶到這題的式子就是
∑i=0n1k∑j=0k?1ωki×j(ni)\sum_{i=0}^n\frac{1}{k}\sum_{j=0}^{k-1}\omega_k^{i\times j}\binom{n}{i}i=0n?k1?j=0k?1?ωki×j?(in?)
然后把jjj提出來
1k∑j=0k?1∑i=0n(ωki)j(ni)\frac{1}{k}\sum_{j=0}^{k-1}\sum_{i=0}^n(\omega_k^{i})^j\binom{n}{i}k1?j=0k?1?i=0n?(ωki?)j(in?)
然后二項式定理
1k∑j=0k?1(ωki+1)n\frac{1}{k}\sum_{j=0}^{k-1}(\omega_k^{i}+1)^nk1?j=0k?1?(ωki?+1)n

額但是nnn很大直接用復數精度肯定會炸,但是998244353?1=223×7×17998244353-1=2^{23}\times 7\times 17998244353?1=223×7×17…又因為k=2pk=2^pk=2p,其實就是類似于NTTNTTNTT的思路我們直接用原根ωk1=gP?1k\omega_k^1=g^{\frac{P-1}{k}}ωk1?=gkP?1?就好了。

時間復雜度O(klog?n)O(k\log n)O(klogn)


code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll P=998244353; ll n,k,ans; ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans; } signed main() {scanf("%lld%lld",&n,&k);ll g=power(3,(P-1)/k),z=1;for(ll i=0;i<k;i++,z=z*g%P)(ans+=power(z+1,n)%P)%=P;printf("%lld\n",ans*power(k,P-2)%P);return 0; }

總結

以上是生活随笔為你收集整理的Loj#6247-九个太阳【单位根反演】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。