首先是惯例的吐槽。SDOI题目名称是一个循环,题目内容也是一个循环,基本上过几年就把之前的题目换成另一个名字出出来,喜大普奔亦可赛艇。学长说考SDOI可以考出联赛分数,%%%。

下面放解题报告。并不喜欢打莫比鸟斯的解题报告就是因为公式编辑太鬼。

不知道多少分算法:简单模拟不解释。

正解一眼是莫比鸟斯函数,话说上次考莫比鸟斯就是去年吧,好像题目名也叫数字表格,只不过多了一个前缀"Crash的"。

慢慢推吧,这里公式编辑器好像坏了?雾,贼慢。

假设n<=m;(if(n>m)swap(n,m);)

老套路,枚举(i,j),看被算了多少次。

//好像不是严格意义上的布尔表达式?差不多就是这个意思吧。

然后提前+替换,变成了

然后上面那一堆东西就是喜闻乐见的莫比鸟斯函数优化

变成这样一个鬼样子

上面那堆就是喜闻乐见的数论分块搞搞。

然后注意到其实下面这一段也可以分块... ...

还是要解释一下:

把指数那一堆设为Get(nn,mm),可以用数论分块算出来。

然后原式就变成了

又可以喜闻乐见数论分块。

现在大概是O(n1/2(n1/2)1/2)=O(n3/4)*T;

然后直接肛正面应该只有60分。

100分的话卡卡常数,加点记忆化就过去了...就过去了...(大雾)。

然后还要预处理前缀积什么的,还要用逆元和欧拉函数降幂大法... ...

这题出的还是不错的。

然后好像逆元预处理 比爆算 要慢一点?雾。

其实可以离线后再省一点预处理的时间(丧心病狂)。

无所谓了。在B站上应该稳定40s以内吧。

把long long 改成int 是最好的常数优化。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#define LL long long
using namespace std; const int N = 1000010;
const int Mod = 1000000007;
const int Nmod = Mod-1;
int n,m,f[N],miu[N],vis[N],P[N/10],tot,Ny[N];
int map[5010][5010];
LL Ans,ans; inline int gi()
{
int x=0,res=1;char ch=getchar();
while(ch<'0' || ch>'9'){if(ch=='-')res=-res;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*res;
} inline int QPow(int d,int z)
{
int _ans=1;
for(;z;z>>=1,d=(LL)d*d%Mod)
if(z&1)_ans=(LL)_ans*d%Mod;
return _ans;
} inline void pre()
{
f[1]=1;
for(int i=2;i<N;++i){
f[i]=f[i-1]+f[i-2];
if(f[i]>=Mod)f[i]-=Mod;
}
f[0]=1;
for(int i=1;i<N;++i)
f[i]=(LL)f[i]*f[i-1]%Mod;
for(int i=0;i<N;++i)
Ny[i]=QPow(f[i],Mod-2);
} inline void shai()
{
miu[1]=1;
for(int i=2;i<N;++i){
if(!vis[i])P[++tot]=i,miu[i]=-1;
for(int j=1;j<=tot;++j){
int Inc=i*P[j];
if(Inc>=N)break;
vis[Inc]=1;
if(i%P[j]==0)break;
miu[Inc]=-miu[i];
}
}
for(int i=1;i<=N;++i)
miu[i]=miu[i-1]+miu[i];
} inline int Get(int nn,int mm)
{
if(nn<=5000 && mm<=5000)
if(map[nn][mm])return map[nn][mm];
ans=0;
for(int l=1,r;l<=nn;l=r+1){
r=min(nn/(nn/l),mm/(mm/l));
ans+=1ll*(miu[r]-miu[l-1])*(nn/l)*(mm/l);
}
ans%=Nmod;
if(nn<=5000 && mm<=5000)map[nn][mm]=ans;
return ans;
} int main()
{
pre();shai();int T=gi();
while(T--){
Ans=1;n=gi();m=gi();if(n>m)swap(n,m);
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
Ans=1ll*Ans*QPow(1ll*f[r]*Ny[l-1]%Mod,Get(n/l,m/l))%Mod;
}
printf("%lld\n",Ans);
}
return 0;
}

  

BZOJ 4816 数字表格的更多相关文章

  1. bzoj 4816 数字表格 —— 反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4816 推导过程同:http://www.cnblogs.com/zhouzhendong/p ...

  2. BZOJ:4816: [Sdoi2017]数字表格

    4816: [Sdoi2017]数字表格 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 501  Solved: 222[Submit][Status ...

  3. 【BZOJ 4816】 4816: [Sdoi2017]数字表格 (莫比乌斯)

    4816: [Sdoi2017]数字表格 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 666  Solved: 312 Description Do ...

  4. 【BZOJ】【2154】Crash的数字表格

    莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...

  5. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

    BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...

  6. [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, ...

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

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

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

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

  9. 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)

    2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...

随机推荐

  1. Model中设置表单验证方法

    Model类里面定义$_validate属性支持的验证因子格式: 格式:array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间). 验证条件: (1)Model::EXISTS_TO_ ...

  2. 制作支持 BIOS+UEFI 的 U 盘 grub2+bootmgr 引导 + deepin_recovery + deepin_iso + win_pe

    网盘下载:https://pan.baidu.com/s/1c2GXPo0 U盘为 FAT32,MBR分区表 1.下载:U盘grub2+bootmgr引导2017.12.6.2.7z 2.解压到 U盘 ...

  3. Python函数篇(二)之递归函数、匿名函数及高阶函数

    1.全局变量和局部变量 一般定义在程序的最开始的变量称为函数变量,在子程序中定义的变量称为局部变量,可以简单的理解为,无缩进的为全局变量,有缩进的是局部变量,全局变量的作用域是整个程序,而局部变量的作 ...

  4. mybatis运行时拦截ParameterHandler注入参数

    在实现多租户系统时,每个租户下的用户,角色,权限,菜单都是独立的,每张表里都有租户Id字段 (tenantId),每次做数据库操作的时候都需要带上这个字段,很烦. 现在的需求就是在mybatis向sq ...

  5. toastr 通知提示插件

    table.sb-tb td,table.sb-tb th { padding: 5px 10px !important } jquery toastr 一款轻量级的通知提示框插件. 网页开发中经常会 ...

  6. CentOS6.5 下Nginx 的安装与配置

    昨天买了个服务器最近在配置一些基础环境,想在访问www.wzpbk.com:8080  不想要后面的:8080就能直接访问到,听说了Nginx就研究下给服务器装上传说中大名鼎鼎 Nginx 他能反向代 ...

  7. Akka(41): Http:DBTable-rows streaming - 数据库表行交换

    在前面一篇讨论里我们介绍了通过http进行文件的交换.因为文件内容是以一堆bytes来表示的,而http消息的数据部分也是byte类型的,所以我们可以直接用Source[ByteString,_]来读 ...

  8. [转]git问题ERROR: Repository not found.的解决

    原文地址:http://blog.csdn.net/u010154424/article/details/51233966 在github中新增了一个项目,按照git的提示添加了远程仓库,但是提交的时 ...

  9. HDU 1711 Number Sequence(字符串匹配)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  10. 通过c# 实现mysql 数据库的备份和附加

    近期涉及到通过c# 对mysq数据库的备份和附件功能 由于mysql 有类似的备份和附加的cmd命令.可是一直没用过,今天实践了下,感觉效率挺快.比自己写的效率高.以下我列出c#调用mysql的备份和 ...