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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

51nod 1258 序列求和 V4

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod 1258 序列求和 V4 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

跪爛(貌似我記得,是我要學習多項式的一些東西,然后發現可以搞伯努利數,然后就奇怪的入坑了)

這個題顯然是不可以n^2來預處理伯努利數的

那怎么辦呢。。。。。。。。找題解啊。。。

這里有伯努利數的生成函數,(不知道怎么推的),然后搞一搞就成了一個多項式求逆的樣子。

而且這個題還有一個BT的就是,1e9+7是不能寫成1+2^k*n的形式的,所以就沒有辦法直接NTT,這里還要用到一個三模數NTT,就是取出3個滿足1+2^k*n形式的大質數(先假設為a,b,c吧),滿足a*b*c>n*P*P(P在這里就是1e9+7)(雖然不知道為什么)

然后三模數NTT最后當然是要用CRT來合并的,這里直接CRT合并的話long long就炸掉了,所以用一點小技巧http://blog.csdn.net/u014609452/article/details/68058602

大概就好了吧。呵呵。。

1 #include<bits/stdc++.h> 2 #define LL long long 3 using namespace std; 4 5 const int mod=1e9+7; 6 const int M[]={998244353,1004535809,469762049}; 7 const int G[]={3,3,3}; 8 const LL _M=(LL)M[0]*M[1]; 9 10 LL ksm(LL a, int b, int p) 11 { 12 LL sum=1; a%=p; 13 for (;b;b>>=1,a=a*a%p) 14 if (b&1) sum=sum*a%p; 15 return sum; 16 } 17 LL mul(LL a, LL b, LL p) 18 { 19 a%=p; b%=p; 20 return ((a*b-(LL)((LL)((long double)a/p*b+1e-3)*p))%p+p)%p; 21 } 22 23 const int m1=M[0],m2=M[1],m3=M[2]; 24 const int inv1=ksm(m1%m2,m2-2,m2),inv2=ksm(m2%m1,m1-2,m1),inv12=ksm(_M%m3,m3-2,m3); 25 int CRT(int a1, int a2, int a3) 26 { 27 LL A=(mul((LL)a1*m2%_M,inv2,_M)+mul((LL)a2*m1%_M,inv1,_M))%_M; 28 LL k=((LL)a3+m3-A%m3)*inv12%m3; 29 return (k*(_M%mod)+A)%mod; 30 } 31 32 const int N=264000; 33 int R[N]; 34 struct NTT{ 35 int P,G; 36 int num,w[2][N]; 37 void pre(int _P, int _G, int m) 38 { 39 num=m; P=_P; G=_G; 40 int g=ksm(G,(P-1)/num,P); 41 w[1][0]=1; for (int i=1; i<num; i++) w[1][i]=(LL)w[1][i-1]*g%P; 42 w[0][0]=1; for (int i=1; i<num; i++) w[0][i]=w[1][num-i]; 43 } 44 void FFT(int *a, int n, int f) 45 { 46 for (int i=0; i<n; i++) if (i<R[i]) swap(a[i],a[R[i]]); 47 for (int i=1; i<n; i<<=1) 48 for (int j=0; j<n; j+=(i<<1)) 49 for (int k=0; k<i; k++) 50 { 51 int x=a[j+k],y=(LL)a[j+k+i]*w[f][num/(i<<1)*k]%P; 52 a[j+k]=(x+y)%P; a[j+k+i]=(x-y+P)%P; 53 } 54 if (!f) for (int i=0,inv=ksm(n,P-2,P); i<n; i++) a[i]=(LL)a[i]*inv%P; 55 } 56 }ntt[3]; 57 58 int tmp[N],b2[N],b3[N],_b[3][N],c[N]; 59 60 void get_inv(int *a, int *b, int n) 61 { 62 if (n==1) return void(b[0]=CRT(ksm(a[0],m1-2,m1),ksm(a[0],m2-2,m2),ksm(a[0],m3-2,m3))); 63 get_inv(a,b,n>>1); 64 int L=0; while (!(n>>L&1)) L++; 65 for (int i=1; i<(n<<1); i++) R[i]=(R[i>>1]>>1)|((i&1)<<L); 66 67 for (int i=0; i<n; i++) b2[i]=b3[i]=b[i],tmp[i]=a[i],b2[i+n]=b3[i+n]=0; 68 ntt[0].FFT(b,n<<1,1); ntt[1].FFT(b2,n<<1,1); ntt[2].FFT(b3,n<<1,1); 69 70 for (int I=0; I<3; I++) 71 { 72 int *d=I==0?b:(I==1?b2:b3); 73 for (int i=0; i<n; i++) tmp[i+n]=0,tmp[i]=a[i]; 74 ntt[I].FFT(tmp,n<<1,1); 75 for (int i=0; i<(n<<1); i++) tmp[i]=(LL)tmp[i]*d[i]%M[I]; 76 ntt[I].FFT(tmp,n<<1,0); 77 for (int i=0; i<(n<<1); i++) _b[I][i]=tmp[i]; 78 } 79 80 for (int i=0; i<(n<<1); i++) c[i]=CRT(_b[0][i],_b[1][i],_b[2][i]),c[i]=c[i]==0?0:mod-c[i]; 81 c[0]=(c[0]+2)%mod; 82 83 for (int I=0; I<3; I++) 84 { 85 int *d=I==0?b:(I==1?b2:b3); 86 for (int i=0; i<n; i++) tmp[n+i]=0,tmp[i]=c[i]; 87 ntt[I].FFT(tmp,n<<1,1); 88 for (int i=0; i<(n<<1); i++) tmp[i]=(LL)tmp[i]*d[i]%M[I]; 89 ntt[I].FFT(tmp,n<<1,0); 90 for (int i=0; i<(n<<1); i++) _b[I][i]=tmp[i]; 91 } 92 93 for (int i=0; i<n; i++) b[i]=CRT(_b[0][i],_b[1][i],_b[2][i]),b[n+i]=0; 94 } 95 96 LL fac[N],inv[N]; 97 98 void init(int n) 99 { 100 fac[0]=inv[0]=inv[1]=1; 101 for (int i=1; i<=n; i++) fac[i]=fac[i-1]*i%mod; 102 for (int i=2; i<=n; i++) inv[i]=(LL)(mod-mod/i)*inv[mod%i]%mod; 103 for (int i=2; i<=n; i++) inv[i]=inv[i-1]*inv[i]%mod; 104 } 105 LL C(int n, int m) {return fac[n]*inv[m]%mod*inv[n-m]%mod;} 106 107 108 int n,m; 109 int a[N],b[N]; 110 int _a[3][N],B[N]; 111 112 int solve(int n, int m) 113 { 114 static LL pw[N]; 115 /* pw[0]=1; for (int i=1; i<=m+1; i++) pw[i]=pw[i-1]*(n%mod)%mod; 116 LL ret=((LL)m+1)*((mod+1)>>1)%mod*pw[m]%mod; 117 for (int k=0; k<=m; k+=2) ret=(ret+C(m+1,k)*B[k]%mod*pw[m+1-k]%mod)%mod;;*/ 118 pw[0]=1; for (int i=1; i<=m+1; i++) pw[i]=pw[i-1]*n%mod; 119 LL ret=0; 120 for (int k=1; k<=m+1; k++) ret=(ret+(LL)B[m+1-k]*pw[k]%mod*C(m+1,k)%mod)%mod; 121 return ret%mod*ksm(m+1,mod-2,mod)%mod; 122 } 123 int main() 124 { 125 n=50000; 126 for (m=1; m<=n; m<<=1); 127 for (int i=0; i<3; i++) ntt[i].pre(M[i],G[i],m<<1); 128 init(m+1); 129 for (int i=0; i<m; i++) a[i]=inv[i+1]; 130 get_inv(a,b,m); 131 for (int i=0; i<m; i++) B[i]=(LL)b[i]*fac[i]%mod; 132 int T,_K; LL _n; scanf("%d",&T); 133 while (T--) 134 { 135 scanf("%lld%d",&_n,&_K); _n++; _n%=mod; 136 printf("%d\n",solve(_n,_K)); 137 } 138 return 0; 139 }

?

轉載于:https://www.cnblogs.com/ccd2333/p/6792811.html

總結

以上是生活随笔為你收集整理的51nod 1258 序列求和 V4的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线不卡一区二区 | 又粗又猛又爽又黄少妇视频网站 | 成人拍拍拍 | 免费看一级一片 | 亚洲最新视频 | 老师用丝袜脚帮我脚交 | 亚洲国产一区二区三区a毛片 | 天天色天天色 | 色小姐av | 国产在线视频资源 | 日韩欧美中文在线观看 | 波多在线观看 | 精产国产伦理一二三区 | 欧美日韩免费观看一区=区三区 | jizz免费在线观看 | 国产精品久久久久久久久久 | 91免费视频网址 | 日本视频在线观看 | 天天干狠狠干 | 看中国毛片| 夜色在线影院 | 久久久久久久久久久久久久av | 97超碰人人爱 | 国产精品人妻 | 日本网站在线播放 | 亚洲一区二区三区麻豆 | 97超碰在线资源 | 波多野结衣办公室33分钟 | 久草福利在线观看 | 人人色网| 久久久久久久久久91 | 伊人久久精品 | 色吧av色av| 最新中文字幕久久 | 日批视频在线免费看 | 麻豆三级视频 | 66亚洲一卡2卡新区成片发布 | 亚洲特黄 | 人人草在线观看 | 国产黄大片在线观看画质优化 | 免费91网站 | 96看片 | 欧美精品色视频 | 男女视频免费看 | 天天色网站 | www视频免费观看 | 福利国产片 | 精品久久久免费 | 99福利网| 国产91啪| 国产中出| 中文一区在线观看 | 欧洲精品在线播放 | 日韩高清不卡 | 久操精品在线 | 人与动物毛片 | 精品久久久免费 | 亚洲系列中文字幕 | 色屁屁影院www国产高清麻豆 | 亚洲免费av片 | 中文字幕av无码一区二区三区 | 久久久三级视频 | 国产真人真事毛片 | 成人交性视频免费看 | 午夜aa| 毛片一级视频 | 欧美sm凌虐视频网站 | 91在线精品一区二区 | 91毛片观看 | 看毛片视频| 欧美com | 丝袜av电影 | 日本激情视频网站 | 俺来也在线视频 | 国产精品边吃奶边做爽 | 午夜性福利| 伊人影院在线播放 | 欧美日韩免费在线视频 | www.色日本| 国产69精品久久久久久 | av高清一区二区 | 中文字幕日韩一区二区三区不卡 | 亚洲性视频在线 | 日韩一道本 | 美女又爽又黄免费 | 午夜一区二区三区四区 | 素人一区 | 高清国产视频 | 成年人www | 国产日韩欧美不卡 | 国产精品二区三区 | 一级片aaaa| 落日余晖 | 国产wwww | 精品人妻一区二区三区在线视频 | 日韩在线视频免费看 | 人妻av一区二区 | 人妻熟女一区二区三区 | 亚洲影音|