题目链接

  给你们讲个笑话:Konoset是个sb,他快速幂的时候把幂次取模了。

  原式差不多就是这样吧$\prod\limits_{i=1}^{n}\prod\limits_{j=1}^{m}f[gcd(i,j)]$

  然后我们枚举gcd(i,j)

  可以变换一下

  $\prod\limits_{w=1}^{min(n,m)}f[w]^{\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)==w]}$

  然后上面那个玩意搞搞可以反演一下

  变为$\prod\limits_{w=1}^{min(n,m)}f[w]^{\sum\limits_{w|d}\mu(\frac{d}{w})\frac{n}{d}\frac{m}{d}}$

  上面那个玩意显然=$\sum\limits_{d}\mu(d)\frac{n}{dw}\frac{m}{dw}$

  然后枚举T=dw

  指数变为$\sum\limits_{\frac{T}{w}}\mu(\frac{T}{w})\frac{n}{T}\frac{m}{T}$

  然后把上面那个cigma搬到下面来

  变成累乘

  然后改成枚举T,中间预处理前缀积后面n除以Tm除以T的部分数论分块

  这题是真的恶心

  

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cctype>
#define maxn 1000020
#define mod 1000000007
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} long long fib[maxn];
long long sum[maxn];
long long mul[maxn];
long long ni[maxn];
int miu[maxn];
bool vis[maxn];
int prime[maxn],num; long long pow(long long n,long long x){
long long ans=;
while(x){
if(x&) ans=(ans*n)%mod;
n=(n*n)%mod;
x>>=;
}
return ans;
} int main(){
fib[]=;fib[]=vis[]=vis[]=miu[]=;
for(int i=;i<maxn;++i){
if(vis[i]==){
prime[++num]=i;
miu[i]=-;
}
for(int j=;j<=num&&i*prime[j]<maxn;++j){
vis[i*prime[j]]=;
if(i%prime[j]==) break;
miu[i*prime[j]]=-miu[i];
}
}
for(int i=;i<maxn;++i){
fib[i]=(fib[i-]+fib[i-])%mod;
sum[i]=;
}
sum[]=;
for(int i=;i<maxn;++i){
long long now=fib[i],ret=pow(now,mod-);
for(register int j=i;j<maxn;j+=i){
if(miu[j/i]==) sum[j]=(sum[j]*now)%mod;
else sum[j]=(sum[j]*ret)%mod;
}
}
mul[]=sum[];mul[]=;ni[]=ni[]=;
for(int i=;i<maxn;++i){
mul[i]=(sum[i]*mul[i-])%mod;
ni[i]=pow(mul[i],mod-);
}
int T=read();
while(T--){
long long n=read(),m=read();
int l=;long long ans=;int top=min(n,m);
while(l<=top){
int r=min(n/(n/l),m/(m/l));
ans*=pow(mul[r]*ni[l-]%mod,(n/l)*(m/l));
ans%=mod;
l=r+;
}
printf("%lld\n",ans);
}
return ;
}

  

【Luogu】P3704数字表格(莫比乌斯反演+大胆暴力)的更多相关文章

  1. [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)

    [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...

  2. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  3. 【bzoj2154】Crash的数字表格 莫比乌斯反演

    题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如,LCM(6, ...

  4. 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]

    数字表格 Time Limit: 50 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...

  5. 【bzoj4816】[Sdoi2017]数字表格 莫比乌斯反演

    题目描述 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生 ...

  6. [Sdoi2017]数字表格 [莫比乌斯反演]

    [Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...

  7. BZOJ4816 SDOI2017 数字表格 莫比乌斯反演

    传送门 做莫比乌斯反演题显著提高了我的\(\LaTeX\)水平 推式子(默认\(N \leq M\),分数下取整,会省略大部分过程) \(\begin{align*} \prod\limits_{i= ...

  8. 【BZOJ】2154: Crash的数字表格 莫比乌斯反演

    [题意]给定n,m,求Σlcm(i,j),1<=i<=n,1<=j<=m,n,m<=10^7. [算法]数论(莫比乌斯反演) [题解] $$ans=\sum_{i\leq ...

  9. [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

    题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑N​y=1∑M​lim(x, ...

随机推荐

  1. IIS 7.0的根文件(applicationHost.config)位置及说明

    位置 C:\Windows\System32\inetsrv\config\applicationHost.config 说明 https://www.microsoft.com/taiwan/tec ...

  2. 一把剪刀看懂git reset 和它的三个参数

    都说git 命令难记且难懂,但是如果从立体的角度看待git与git管理的版本,那么一切都会明朗许多. 大多数的学习教程为了理解git,会绘制几个圆圈的串联,每个圆圈代表一个commit的版本,也就是从 ...

  3. Spring归纳

    Spring总结 bean标签的scope属性 scope="singleton",单例模式,默认值 scope="prototype",多例模式 注解元素 @ ...

  4. MAC OSXU盘会挂载目录

    当U盘接到系统后,你可以在Terminal里输入df -lh.这时,硬盘的使用和分区情况会输出,你在Mounted on 这一列数据中可以找到你的U盘或新添加的硬盘的挂载路径.

  5. const,static,extern,#define

    一.const // 简单定义变量,可以修改变量的值 ; a = ; // const的用法 // 用法一: ; ; // 不允许修改,因为 const 修饰 b/c,指定 b/c 为常量!! // ...

  6. this经典试题

    <body> <div class="container"> <h3>输出内容</h3> <pre> var name ...

  7. 03等待多个线程返回WaitForMultipleObject

    二. WaitForMultipleObject 等待单个线程返回 1. 函数原型 DWORD WINAPI WaitForMultipleObjects( _In_ DWORD nCount, _I ...

  8. LeetCode之Weekly Contest 93

    第一题:二进制间距 问题: 给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离. 如果没有两个连续的 1,返回 0 . 示例 1: 输入:22 输出:2 解释: 22 的 ...

  9. Primer C++第五版 读书笔记(一)

    Primer C++第五版 读书笔记(一) (如有侵权请通知本人,将第一时间删文) 1.1-2.2 章节 关于C++变量初始化: 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义 ...

  10. MySQL迁移至MariaDB

    为什么要用MariaDB来代替MySQL MariaDB是MySQL社区开发的分支,也是一个增强型的替代品.它由MySQL前开发者们带头组织的基金会开发,使用起来和MySQL完全一样.自从Oracle ...