bzoj4816 [Sdoi2017]数字表格
Description
Input
有多组测试数据。
Output
Sample Input
2 3
4 5
6 7
Sample Output
6
960
正解:莫比乌斯函数。
水水的一道题,不过卡常数。。推导一波吧。。
$Ans=\prod_{i=1}^{n}\prod_{j=1}^{m}f(\gcd(i,j))$
$Ans=\prod_{d=1}^{min(n,m)}f(d)^{\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)==d]}$
直接跳过吧。。因为中间的都是老套路了。。
$Ans=\prod_{d=1}^{min(n,m)}f(d)^{\sum_{p=1}^{min(\left \lfloor \frac{n}{d} \right \rfloor,\left \lfloor \frac{m}{d} \right \rfloor)} \mu(p)\left \lfloor \frac{n}{dp} \right \rfloor\left \lfloor \frac{m}{dp} \right \rfloor}$
然后好像没办法往下化简了,不过这个式子用数论分块就能过了。。因为复杂度不是满的,好像是$O(Tn^{\frac{3}{4}})$吧。。
反正这就能$AC$了。。
//It is made by wfj_2048~
#include <algorithm>
#include <iostream>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define rhl (1000000007)
#define inf (1<<30)
#define N (1000010)
#define il inline
#define RG register
#define ll long long
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) using namespace std; int vis[N],inv[N],mu[N],prime[N],n,m,cnt,pos1,pos2;
ll f[N],ans; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} il ll qpow(RG ll a,RG ll b){
RG ll ans=;
while (b){
if (b&) ans=ans*a%rhl;
a=a*a%rhl,b>>=;
}
return ans;
} il void pre(){
f[]=vis[]=mu[]=;
for (RG int i=;i<N;++i){
if (!vis[i]) prime[++cnt]=i,mu[i]=-;
for (RG int j=,k;j<=cnt;++j){
k=i*prime[j]; if (k>=N) break; vis[k]=;
if (i%prime[j]) mu[k]=-mu[i]; else break;
}
f[i]=f[i-]+f[i-]; if (f[i]>=rhl) f[i]-=rhl;
}
inv[]=inv[]=,f[]=;
for (RG int i=;i<N;++i)
mu[i]+=mu[i-],f[i]*=f[i-],f[i]%=rhl,inv[i]=qpow(f[i],rhl-);
return;
} il void work(){
n=gi(),m=gi(),ans=; if (n>m) swap(n,m);
for (RG int i=;i<=n;i=pos1+){
pos1=min(n/(n/i),m/(m/i)); RG ll res=;
for (RG int j=;j<=n/i;j=pos2+){
pos2=min(n/i/(n/i/j),m/i/(m/i/j));
res+=(ll)(mu[pos2]-mu[j-])*(n/i/j)*(m/i/j);
}
ans*=qpow(f[pos1]*(ll)inv[i-]%rhl,res),ans%=rhl;
}
printf("%lld\n",ans); return;
} int main(){
File("product");
pre(); RG int T=gi();
while (T--) work();
return ;
}
bzoj4816 [Sdoi2017]数字表格的更多相关文章
- BZOJ4816 [Sdoi2017]数字表格 数论 莫比乌斯反演
原文链接http://www.cnblogs.com/zhouzhendong/p/8666106.html 题目传送门 - BZOJ4816 题意 定义$f(0)=0,f(1)=1,f(i)=f(i ...
- BZOJ4816 [Sdoi2017]数字表格 【莫比乌斯反演】
题目 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生成了 ...
- BZOJ4816 SDOI2017 数字表格 莫比乌斯反演
传送门 做莫比乌斯反演题显著提高了我的\(\LaTeX\)水平 推式子(默认\(N \leq M\),分数下取整,会省略大部分过程) \(\begin{align*} \prod\limits_{i= ...
- BZOJ4816 Sdoi2017数字表格
一开始只推出O(TN)的做法,后来看了看发现再推一步就好了. 我们只需要枚举gcd就可以啦. 然后我们改变一下枚举顺序 设T为dk 预处理中间那部分前缀积就好了. #include<bits/s ...
- [bzoj4816][Sdoi2017]数字表格 (反演+逆元)
(真不想做莫比乌斯了) 首先根据题意写出式子 ∏(i=1~n)∏(j=1~m)f[gcd(i,j)] 很明显的f可以预处理出来,解决 根据套路分析,我们可以先枚举gcd(i,j)==d ∏(d=1~n ...
- BZOJ:4816: [Sdoi2017]数字表格
4816: [Sdoi2017]数字表格 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 501 Solved: 222[Submit][Status ...
- [Sdoi2017]数字表格 [莫比乌斯反演]
[Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...
- 【BZOJ4816】数字表格(莫比乌斯反演)
[BZOJ4816]数字表格(莫比乌斯反演) 题面 BZOJ 求 \[\prod_{i=1}^n\prod_{j=1}^mf[gcd(i,j)]\] 题解 忽然不知道这个要怎么表示... 就写成这样吧 ...
- 【BZOJ 4816】 4816: [Sdoi2017]数字表格 (莫比乌斯)
4816: [Sdoi2017]数字表格 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 666 Solved: 312 Description Do ...
随机推荐
- canvas的beginPath和closePath分析总结,包括多段弧的情况
参考博文: Html5 canvas画图教程17:论beginPath的重要性 先看两个例子 例1: <canvas id="myCanvas" width="30 ...
- 通过Map间接比较两个Json格式是否相同
首先,我们举个例子来对两个Json格式进行比较 第一个Json格式: {"singleway":[],"multiway":{"channelSlav ...
- CSS后代选择器、子元素选择器、相邻兄弟选择器区别与详解
派生选择器用的很多,派生选择器具体包括为后代选择器.子元素选择器.相邻兄弟选择器,我们来理解一下他们之间的具体用法与区别. 1.css后代选择器语法:h1 em {color:red;} 表示的是从h ...
- JS停止事件冒泡
..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) //因此它支持W3C的stopP ...
- 张高兴的 UWP 开发笔记:定制 ContentDialog 样式
我需要一个背景透明的 ContentDialog,像下图一样.如何定制?写了一个简单的示例(https://github.com/ZhangGaoxing/uwp-demo/tree/master/C ...
- Unity 3D Framework Designing(4)——设计可复用的SubView和SubViewModel(Part 1)
『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化 ...
- RunTime 给类添加属性
RunTime网上有很多人都不知道Runtime到底是干嘛的?有很多博主都是长篇大论给他们讲这个讲那个,我感觉还不如实例来的实在.很简单的一个例子:我们都知道会有这样的需求,未读消息列表的图片上要有一 ...
- Redis数据迁移方案
场景 Redis实例A ---> Redis实例B,整库全量迁移 方案一: mac环境 brew install npm npm install redis-dump -g 针对RedisA: ...
- linux命令之查看字符集
lucifer@abc:~$ locale -a 查看本地字符集lucifer@abc:~$ locale -m 查看所有支持的字符集将文件从gb2312转为utf8iconv -f gb2312 - ...
- 【2017-03-31】JS-DOM操作:操作属性、彩虹导航栏、定时器、操作内容、创建元素并添加、操作相关元素
一.操作属性 1.什么是属性: <div class="div" id="div1" style="" ></div> ...