关键词:
一开始只推出O(TN)的做法,后来看了看发现再推一步就好了。
我们只需要枚举gcd就可以啦。
然后我们改变一下枚举顺序
设T为dk
预处理中间那部分前缀积就好了。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+10,mod=1e9+7; 4 int n,m,p[N/2],miu[N],g[N],f[N],inv[N],cnt;bool v[N]; 5 typedef long long ll; 6 int qmod(int x,ll y) 7 8 int ans=1; 9 while(y) 10 11 if(y&1)ans=1ll*ans*x%mod; 12 x=1ll*x*x%mod;y>>=1; 13 14 return ans; 15 16 void init() 17 18 miu[1]=1; 19 for(int i=2;i<=1e6;++i) 20 21 if(!v[i]) 22 23 p[++cnt]=i;miu[i]=-1; 24 25 for(int j=1;j<=cnt&&i*p[j]<=1e6;++j) 26 27 v[i*p[j]]=1; 28 if(i%p[j]==0)break; 29 miu[i*p[j]]=-miu[i]; 30 31 32 for(int i=1;i<=1e6;++i)g[i]=1; 33 f[0]=0;f[1]=g[0]=1; 34 for(int i=2;i<=1e6;++i)f[i]=(f[i-1]+f[i-2])%mod; 35 for(int i=1;i<=1e6;++i) 36 37 inv[i]=qmod(f[i],mod-2); 38 for(int j=i,k=1;j<=1e6;j+=i,k++) 39 if(miu[k]) 40 41 if(miu[k]==-1) 42 g[j]=1ll*g[j]*inv[i]%mod; 43 else 44 g[j]=1ll*g[j]*f[i]%mod; 45 46 g[i]=1ll*g[i]*g[i-1]%mod; 47 48 return; 49 50 int main() 51 52 init();int T; 53 scanf("%d",&T); 54 for(int k=1;k<=T;++k) 55 56 scanf("%d%d",&n,&m); 57 if(n>m)swap(n,m);int ans=1; 58 for(int i=1,j;i<=n;i=j+1) 59 60 j=min(n/(n/i),m/(m/i)); 61 ans=1ll*ans*qmod(1ll*g[j]*qmod(g[i-1],mod-2)%mod,1ll*(n/i)*(m/i))%mod; 62 63 printf("%d\\n",(ans+mod)%mod); 64 65 return 0; 66
bzoj.4816.[sdoi2017]数字表格(莫比乌斯反演)(代码片段)
题目链接总感觉博客园的\(Markdown\)很。。\(gouzhi\),可以看这的。这个好像简单些啊,只要不犯sb错误\(Description\) 用\(f[i]\)表示\(Fibonacci\)数列的第\(i\)项,求\[\prod_i=1^n\prod_j=1^mf[\gcd(i,j)]\mod(10^9+7)\]\(Solution\)\[\beginalignedAns& 查看详情
bzoj4816sdoi2017数字表格(代码片段)
一开始只推出O(TN)的做法,后来看了看发现再推一步就好了。我们只需要枚举gcd就可以啦。然后我们改变一下枚举顺序 设T为dk预处理中间那部分前缀积就好了。1#include<bits/stdc++.h>2usingnamespacestd;3constintN=1e6+10,mod=1e9+7;4intn,m,... 查看详情
bzoj4816:[sdoi2017]数字表格
二次联通门: BZOJ4816:[Sdoi2017]数字表格 /*BZOJ4816:[Sdoi2017]数字表格莫比乌斯反演妈呀,我的μ没有啦*/#include<cstdio>#include<iostream>#definergregister#defineMax1000050#definemo1000000007 查看详情
bzoj4816:[sdoi2017]数字表格
题目链接bzoj4816:[Sdoi2017]数字表格题解满满的反演的套路的味道\[Ans=\prod_i=1^n\prod_j=1^mf[gcd(i,j)]\]常规操作枚举约数\[\prod_d=1^n\prod_i=1^n\prod_j=1^mgcd(i,j)==d\?\f[gcd(i,j)]\]上面的式子可以化为\[\prod_d=1^nf[d]^\su 查看详情
[bzoj4816][sdoi2017]数字表格
[BZOJ4816][Sdoi2017]数字表格试题描述Doris刚刚学习了fibonacci数列。用f[i]表示数列的第i项,那么f[0]=0f[1]=1f[n]=f[n-1]+f[n-2],n>=2Doris用老师的超级计算机生成了一个n×m的表格,第i行第j列的格子中的数是f[gcd(i,j)],其中gcd(i,j)表示i,j的最... 查看详情
bzoj4816:[sdoi2017]数字表格
问题: [n/k]/d==[n/(kd)]; 线性筛正确性证明 这么求逆元Right?a=k*p; 1LL转化作用域 longlong做数组下标#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;typedeflonglongLint;constintmaxn=100 查看详情
bzoj4816:[sdoi2017]数字表格
DescriptionDoris刚刚学习了\(fibonacci\)数列。用\(f[i]\)表示数列的第\(i\)项,那么\[\beginalignf[0]&=0\\f[1]&=1\\f[n]&=f[n-1]+f[n-2],n>=2\endalign\]Doris用老师的超级计算机生成了一个\(n\timesm\)的表格,第\(i\)行第\(j\)列的格子中的 查看详情
bzoj4816[sdoi2017]数字表格
TimeLimit: 50Sec MemoryLimit: 128MBSubmit: 646 Solved: 296DescriptionDoris刚刚学习了fibonacci数列。用f[i]表示数列的第i项,那么f[0]=0f[1]=1f[n]=f[n-1]+f[n-2],n>=2Doris用老师的超级计算 查看详情
bzoj4816[sdoi2017]数字表格莫比乌斯反演
【BZOJ4816】[Sdoi2017]数字表格DescriptionDoris刚刚学习了fibonacci数列。用f[i]表示数列的第i项,那么f[0]=0f[1]=1f[n]=f[n-1]+f[n-2],n>=2Doris用老师的超级计算机生成了一个n×m的表格,第i行第j列的格子中的数是f[gcd(i,j)],其中gcd(i,j)表示i,... 查看详情
bzoj4816:[sdoi2017]数字表格
题面戳我Sol摆公式:(ans=Pi_{i=1}^{n}Pi_{j=1}^{m}f[gcd(i,j)])考虑每个gcd的贡献,设n<m则就是(Pi_{d=1}^{n}Pi_{i=1}^{lfloorfrac{n}{d} floor}Pi_{j=1}^{lfloorfrac{m}{d} floor}f[d]*[gcd(i,j)==1])(=Pi_{d=1}^{ 查看详情
bzoj4816[sdoi2017]数字表格
题目链接以下除法均指下取整[prod_{i=1}^nprod_{j=1}^mf(gcd(i,j))=prod_{x}f(x)^{sum_isum_j[gcd(i,j)=x]}=prod_{x}f(x)^{sum_{x|d}mu(frac{d}{x})frac{n}{d}frac{m}{d}}=prod_{d}(prod_{x|d}f(x)^{mu(frac{d 查看详情
sdoi2017round1day1题解(bzoj4816bzoj4817bzoj4818)
不知道有几个AK的,除了出题人SB搬了个BZOJ3779以外,应该没什么因素阻碍AK吧。要是SCOI考这套题多好。BZOJ4816数字表格SB反演,推出$ans=prod_{i=1}^nf^{sum_{j=1}^{leftlfloorfracni ight floor}mu(j)leftlfloorfracn{ij} ight floorleftlfloorfrac 查看详情
bzoj4816数字表格
...函数,话说上次考莫比鸟斯就是去年吧,好像题目名也叫数字表格,只不过多了一个前缀"Crash的"。慢慢推吧, 查看详情
[sdoi2017]数字表格
[Sdoi2017]数字表格http://www.lydsy.com/JudgeOnline/problem.php?id=4816TimeLimit: 50Sec MemoryLimit: 128MBDescriptionDoris刚刚学习了fibonacci数列。用f[i]表示数列的第i项,那么f[0]=0f[1]=1f[n]=f[n-1]+f[n-2 查看详情
bzoj4816数字表格(莫比乌斯反演)
【BZOJ4816】数字表格(莫比乌斯反演)题面BZOJ求[prod_{i=1}^nprod_{j=1}^mf[gcd(i,j)]]题解忽然不知道这个要怎么表示。。。就写成这样吧。。[prod_{d=1}^nprod_{i=1}^nprod_{j=1}^mif(gcd(i,j)==d)f[gcd(i,j)]]直接把(f[d])提出来[prod_{d=1}^{n}f[d]^ 查看详情
[sdoi2017]数字表格(代码片段)
SOL: 怎么说呢,套路题。随便数论分块就好了//luogu-judger-enable-o2#include<bits/stdc++.h>#defineN1000007#defineLLlonglong#defineprip#definemo1000000007usingnamespacestd;intpri[N/10],tot,u[N],usd[N];LLf[N],ff[ 查看详情
sdoi2017数字表格(代码片段)
题目描述:f为斐波那契数列。T组询问,每次给出表格的n、m。表中(i,j)为gcd(i,j),求表中所有数之积mod1e9+7的值。T<=1e5,n,m<=1e9题解:反演。代码:#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;#defineN1000500# 查看详情
[sdoi2017]数字表格(代码片段)
DescriptionDoris刚刚学习了fibonacci数列。用f[i]表示数列的第i项,那么\[f(x)=\begincases0&,x=0\nonumber\\1&,x=1\nonumber\\f(x-1)+f(x-2)&,x\geqslant2\nonumber\endcases\]Doris用老师的超级计算机生成了一个n×m的表格,第i行第j列的格子中的 查看详情