博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SDOI2017]数字表格
阅读量:6270 次
发布时间:2019-06-22

本文共 2082 字,大约阅读时间需要 6 分钟。

这个题的难点在于,与一般的反演的sigma和乘法不同,这个反演题是pi和乘方。

但是,乘法乘方也有优秀的运算律,所以可以做。

 

fib没有什么可以好的可以卷积的性质,那就单独考虑。

枚举fib的第k项,统计贡献,

指数的位置直接莫比乌斯反演。

剩下k*d这样的

套路地,考虑枚举D=k*d

(争取化成枚举约数的形式,比较好处理)

(而且可以把指数位置的sigma拿出来,分离(这个很关键))

外面枚举的k从1到n,里面的d从1到n/k

所以,D的范围恰好是1到n

然后就可以枚举D,枚举k为D的约数。里面就是d=D/k了。(本质利用a^(x+y)=a^x*a^y)来处理的。

然后

中间括号的函数可以枚举约数然后nlogn处理

之后根号分块即可。

注意1,2一些开始的递推初值赋值,以及它们的逆元别漏掉。

#include
#define il inline#define reg register int#define numb (ch^'0')using namespace std;typedef long long ll;il void rd(int &x){ char ch;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const int N=1e6+5;const int mod=1e9+7;ll fib[N],inv[N];//inv of fibint n,m,t;int miu[N],vis[N],pri[N],tot;ll g[N],ig[N];//inv of g[]ll qm(ll x,ll y){ ll ret=1; while(y){ if(y&1) ret=((ll)ret*x)%mod; x=((ll)x*x)%mod; y>>=1; } return ret;}void sieve(){ miu[1]=1; for(reg i=2;i<=N-3;++i){ if(!vis[i]){ vis[i]=1; miu[i]=-1; pri[++tot]=i; } for(reg j=1;j<=tot;++j){ if((ll)pri[j]*i>N-3) break; vis[pri[j]*i]=1; if(i%pri[j]==0){ miu[i*pri[j]]=0; break; } else{ miu[i*pri[j]]=miu[i]*miu[pri[j]]; } } }}int main(){ rd(t); sieve(); fib[0]=0,fib[1]=1,fib[2]=1; inv[1]=1,inv[2]=1; g[1]=1,g[2]=1; for(reg i=3;i<=N-3;++i) { fib[i]=(fib[i-1]+fib[i-2])%mod; g[i]=1; inv[i]=qm(fib[i],mod-2); //cout<
<<" "<
<
m) swap(n,m); ll ans=1; for(reg i=1,x=0;i<=n;i=x+1){ x=min(n/(n/i),m/(m/i)); ans=(ans*qm((g[x]*ig[i-1])%mod,((ll)(n/i)*(m/i))%(mod-1)))%mod; } printf("%lld\n",ans); } return 0;}}signed main(){ Miracle::main(); return 0;}/* Author: *Miracle* Date: 2018/12/13 11:20:35*/

 

转载于:https://www.cnblogs.com/Miracevin/p/10113251.html

你可能感兴趣的文章
Nginx 设置域名转向配置
查看>>
.net core 实现简单爬虫—抓取博客园的博文列表
查看>>
FP-Tree算法的实现
查看>>
Android 用Handler和Message实现计时效果及其中一些疑问
查看>>
Dos命令删除添加新服务
查看>>
C#.NET常见问题(FAQ)-索引器indexer有什么用
查看>>
hadoop YARN配置参数剖析—MapReduce相关参数
查看>>
Java 正则表达式详细使用
查看>>
【ADO.NET】SqlBulkCopy批量添加DataTable
查看>>
SqlServer--bat批处理执行sql语句1-osql
查看>>
Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令
查看>>
laravel安装初体验
查看>>
用yum查询想安装的软件
查看>>
TIJ -- 吐司BlockingQueue
查看>>
数据库分页查询
查看>>
[编程] C语言枚举类型(Enum)
查看>>
[Javascript] Compose multiple functions for new behavior in JavaScript
查看>>
ASP.NET MVC性能优化(实际项目中)
查看>>
ES6里关于类的拓展(一)
查看>>
零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步
查看>>