[莫比乌斯反演 高斯消元 数学技巧] BZOJ 3601 一个人的数论
2016-12-26 18:43
375 查看
推导过程直接拉过来不是很好
看这位神犇的吧
http://www.cnblogs.com/jianglangcaijin/p/4033399.html
看这位神犇的吧
http://www.cnblogs.com/jianglangcaijin/p/4033399.html
#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef long long ll; const ll P=1e9+7; inline ll Pow(ll a,ll b){ ll ret=1; for (;b;b>>=1,a=a*a%P) if (b&1) ret=ret*a%P; return ret; } inline ll Inv(ll a){ return Pow(a,P-2); } const int N=105; int w,d; ll ip[1005],ia[1005]; ll a ,A ; int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); scanf("%d%d",&d,&w); for (int i=1;i<=w;i++) scanf("%lld%lld",ip+i,ia+i); ll isum=0; for (int i=1;i<=d+2;i++){ ll tem=1; for (int j=1;j<=d+2;j++) a[i][j]=tem,tem=tem*i%P; a[i][d+3]=a[i-1][d+3]+Pow(i,d); } int m=d+2; for (int i=1;i<=m;i++){ int k=i; while (!a[k][i]) k++; for (int j=1;j<=m+1;j++) swap(a[i][j],a[k][j]); ll inv=Inv(a[i][i]); for (int j=1;j<=m;j++){ if (j==i) continue; ll t=a[j][i]*inv%P; for (int k=1;k<=m+1;k++) (a[j][k]+=P-a[i][k]*t%P)%=P; } } for (int i=0;i<=d+1;i++) A[i]=a[i+1][m+1]*Inv(a[i+1][i+1])%P; ll Ans=0; for (int i=0;i<=d+1;i++){ ll hi=1; for (int j=1;j<=w;j++) (hi*=(Pow(ip[j],ia[j]*i%(P-1))+P-Pow(ip[j],(d+(ia[j]-1)*i)%(P-1)))%P)%=P; (Ans+=A[i]*hi%P)%=P; } printf("%lld\n",Ans); return 0; }
相关文章推荐
- 【BZOJ3601】一个人的数论 高斯消元+莫比乌斯反演
- BZOJ 3601 一个人的数论 ——莫比乌斯反演 高斯消元
- [bzoj3601] 一个人的数论 [莫比乌斯反演+高斯消元]
- 【BZOJ3601】一个人的数论,莫比乌斯反演+高斯消元
- bzoj 3601: 一个人的数论 高斯消元&莫比乌斯反演
- BZOJ3601 一个人的数论 【数论 + 高斯消元】
- 【bzoj3601】一个人的数论 莫比乌斯反演+高斯消元
- BZOJ 3601 一个人的数论 莫比乌斯反演+高斯消元
- bzoj3601 一个人的数论 莫比乌斯反演+高斯消元
- [数论][莫比乌斯反演] BZOJ 4816: 数字表格
- 【数论】【莫比乌斯反演】【线性筛】bzoj2301 [HAOI2011]Problem b
- BZOJ_P1013 [JSOI2008]球形空间产生器sphere(数论+高斯消元)
- BZOJ 3143 游走 | 数学期望 高斯消元
- BZOJ 4176 Lucas的数论 莫比乌斯反演
- bzoj3994 约数个数和 数论&莫比乌斯反演
- BZOJ4176 Lucas的数论 【莫比乌斯反演 + 杜教筛】
- 【数论】【莫比乌斯反演】【线性筛】bzoj2005 [Noi2010]能量采集
- BZOJ4652 [Noi2016]循环之美 【数论 + 莫比乌斯反演 + 杜教筛】
- bzoj 4176: Lucas的数论【莫比乌斯反演+杜教筛】
- bzoj2154: Crash的数字表格/2693: jzptab [莫比乌斯反演、数论推导]