洛咕 P3704 [SDOI2017]数字表格
大力推式子
现根据套路枚举\(\gcd(i,j)\)
\(ans=\Pi_{x=1}^nfib[x]^{\sum_{i=1}^{n/x}\sum_{j=1}^{n/x}[\gcd(i,j)=1]}\)
莫比乌斯反演
\(ans=\Pi_{x=1}^nfib[x]^{\sum_{i=1}^{n/x}\mu(i)(n/ix)(m/ix)}\)
把枚举\(i\)提出来,改成枚举\(ix\),里面还是枚举\(x\)
\(ans=\Pi_{i=1}^n\Pi_{x|i}fib[x]^{\mu(i/x)(n/i)(m/i)}\)
有一个\((n/i)(m/i)\),这个明显可以数论分块,但那个\(\mu(i/x)\)就不太好搞了,把他压进去
\(ans=\Pi_{i=1}^n(\Pi_{x|i}fib[x]^{\mu(i/x)})^{(n/i)(m/i)}\)
就可以预处理\(f[i]=(\Pi_{x|i}fib[x]^{\mu(i/x)})\)了
#include<bits/stdc++.h>
#define il inline
#define vd void
#define mod 1000000007
#define Mod 1000000006
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
int pri[1000010],pr,mu[1000010],yes[1000010];
int fib[1000010],ifib[1000010];
int f[1000010],g[1000010];
il int Pow(int x,int y){
int ret=1;
while(y){
if(y&1)ret=1ll*ret*x%mod;
x=1ll*x*x%mod;y>>=1;
}
return ret;
}
int main(){
mu[1]=1;
for(int i=2;i<=1000000;++i){
if(!yes[i])mu[i]=-1,pri[++pr]=i;
for(int j=1;i*pri[j]<=1000000&&j<=pr;++j){
yes[i*pri[j]]=1;
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
mu[i*pri[j]]=-mu[i];
}
}
fib[1]=1;for(int i=2;i<=1000000;++i)fib[i]=(fib[i-1]+fib[i-2])%mod;
for(int i=1;i<=1000000;++i)ifib[i]=Pow(fib[i],mod-2);
for(int i=1;i<=1000000;++i)f[i]=1;
for(int i=1;i<=1000000;++i)
for(int j=i;j<=1000000;j+=i)
if(mu[j/i]==1)f[j]=1ll*f[j]*fib[i]%mod;
else if(mu[j/i]==-1)f[j]=1ll*f[j]*ifib[i]%mod;
for(int i=2;i<=1000000;++i)f[i]=1ll*f[i-1]*f[i]%mod;
g[0]=1;for(int i=1;i<=1000000;++i)g[i]=Pow(f[i],mod-2);
int T=gi(),n,m,ans;
while(T--){
n=gi(),m=gi();
if(n>m)std::swap(n,m);
ans=1;
for(int i=1;i<=n;++i){
int j=std::min(n/(n/i),m/(m/i));
ans=1ll*ans*Pow(1ll*f[j]*g[i-1]%mod,(int)(1ll*(n/i)*(m/i)%Mod))%mod;
i=j;
}
printf("%d\n",ans);
}
return 0;
}
洛咕 P3704 [SDOI2017]数字表格的更多相关文章
- bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格
洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...
- 洛谷P3704 [SDOI2017]数字表格
题目描述 Doris刚刚学习了fibonacci数列.用f[i]f[i] 表示数列的第ii 项,那么 f[0]=0f[0]=0 ,f[1]=1f[1]=1 , f[n]=f[n-1]+f[n-2],n ...
- 洛谷 P3704 [SDOI2017]数字表格(莫比乌斯函数)
题面传送门 题意: 求 \[\prod\limits_{i=1}^n\prod\limits_{j=1}^mfib_{\gcd(i,j)} \] \(T\) 组测试数据,\(1 \leq T \leq ...
- 洛谷P3704 [SDOI2017]数字表格(莫比乌斯反演)
传送门 yyb大佬太强啦…… 感觉还是有一点地方没有搞懂orz //minamoto #include<cstdio> #include<iostream> #include& ...
- 洛谷 P3704 SDOI2017 数字表格
题意: 给定两个整数 \(n, m\),求: \[\prod_{i = 1} ^ n \prod_{j = 1} ^ m \operatorname{Fib}_{\gcd\left(n, m\righ ...
- P3704 [SDOI2017]数字表格
P3704 [SDOI2017]数字表格 链接 分析: $\ \ \ \prod\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} f[gcd(i, j)]$ $ ...
- P3704 [SDOI2017]数字表格 (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3704 [题解] https://www.luogu.org/blog/cjyyb/solution-p3 ...
- 洛谷3704 [SDOI2017] 数字表格 【莫比乌斯反演】
题目分析: 比较有意思,但是套路的数学题. 题目要求$ \prod_{i=1}^{n} \prod_{j=1}^{m}Fib(gcd(i,j)) $. 注意到$ gcd(i,j) $有大量重复,采用莫 ...
- luogu P3704 [SDOI2017]数字表格
传送门 我是真的弱,推式子只能推一半 下面假设\(n<m\) 考虑题目要求的东西,可以考虑每个gcd的贡献,即\[\prod_{d=1}^{n}f[d]^{\sum_{i=1}^{\lfloor ...
随机推荐
- windows使用
将桌面.我的文档.收藏夹等转移到其他盘 方法很多,介绍如下: 一.新装的系统,桌面.我的文档.收藏夹等都是默认在C盘的,并且这些数据都是用户经常用到的一些数据.为了避免以后系统崩溃所带来的危险,最好的 ...
- Content-Length和body_bytes_sent
[map@cq01-map-lbsop-hbase conf]$ curl 'http://10.46.43.14:8100/50x.html' -v* About to connect() to 1 ...
- Windows 7 任务栏图标消失(变透明,仍然占有地方,但是点击无反应)的解决方法
解决方案:清理资源管理器缓存(重启资源管理器) 1.打开程序管理器(ctrl+shift+esc) 2.在进程那里找到"explorer.exe",然后按结束进程 3.然后在文件( ...
- 一起学习Boost标准库--Boost.StringAlgorithms库
概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...
- ISO8583组包、解包
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace POS. ...
- Phoenix安装配置
下载Phoenix 在网站http://phoenix.apache.org/download.html找到对应HBase版本的安装程序,并下载安装包,解压安装程序到指定目录 [root@ha ...
- 没有插件的sublime编辑器是没有灵魂的
这阵子各种捣鼓,现在趁有空记录一下sublime编辑器的一些实用的插件和安装方法,下午又该继续学习了. 接下来安装的是htmlHint.jsHint.cssLint以及汉化这几种插件,其实插件会使我们 ...
- 死磕nginx系列--配置文档解读
nginx配置文件主要分为四个部分: main(全局设置) http ( ) upstream(负载均衡服务器设置) server(主机设置) location(URL匹配特点位置的设置) serve ...
- BZOJ3676:[APIO2014]回文串(SAM,Manacher)
Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...
- 腾讯课堂老师qq号码转换成 teacherid
result = 215696775^858006833 if(result){ result=4294967296+result; } alert(result);