[SDOI2017]数字表格 (莫比乌斯反演)
链接:https://ac.nowcoder.com/acm/problem/20391
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
输入描述:
有多组测试数据。第一个一个数T,表示数据组数。
接下来T行,每行两个数n,m
T ≤ 1000,1 ≤ n,m ≤ 10^6
输出描述:
输出T行,第i行的数是第i组数据的结果
输出
1
6
960 解题思路:

然后预处理出括号里前缀就可以了 代码:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxn=1e6+;
const int mod=1e9+;
int n,m,tot,prime[maxn],mu[maxn];
ll sum[maxn],f[maxn],g[maxn];
ll qpow(ll a,ll b){
ll res=;
while(b){
if(b&) res=res*a%mod;
a=a*a%mod;
b>>=;
}
return res;
}
void getMobius(int N){
for(int i=;i<=N;i++) prime[i]=;
mu[]=; f[]=; g[]=; sum[]=sum[]=;
for(int i=;i<=N;i++){
f[i]=(f[i-]+f[i-])%mod;
g[i]=qpow(f[i],mod-);
sum[i]=;
if(prime[i]){
mu[i]=-;
prime[tot++]=i;
}
for(int j=;j<tot&&i*prime[j]<=N;j++){
prime[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
for(int i=;i<=N;i++){ //预处理前缀
for(int j=i;j<=N;j+=i){
if(mu[j/i]==)continue;
if(mu[j/i]==) sum[j]=sum[j]*f[i]%mod;
else sum[j]=sum[j]*g[i]%mod;
}
}
for(int i=;i<=N;i++) sum[i]=sum[i]*sum[i-]%mod;
}
ll solve(int a,int b){
ll res=;
if(a>b) swap(a,b);
for(int l=,r;l<=a;l=r+){
r=min(a/(a/l),b/(b/l));
ll inv=sum[r]*qpow(sum[l-],mod-)%mod; //注意除sum[l-1],需要转化成乘它对mod的逆元
res=res*qpow(inv,1ll*(a/l)*(b/l)%(mod-))%mod;
}
return res;
}
int main(){
int T;
scanf("%d",&T);
getMobius(1e6);
while(T--){
scanf("%d%d",&n,&m);
printf("%lld\n",solve(n,m));
}
return ;
}
[SDOI2017]数字表格 (莫比乌斯反演)的更多相关文章
- [Sdoi2017]数字表格 [莫比乌斯反演]
[Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...
- 【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= ...
- BZOJ.4816.[SDOI2017]数字表格(莫比乌斯反演)
题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 这个好像简单些啊,只要不犯sb错误 [Update] 真的算反演中比较裸的题了... \(Descriptio ...
- BZOJ 4816 [Sdoi2017]数字表格 ——莫比乌斯反演
大力反演出奇迹. 然后xjb维护. 毕竟T1 #include <map> #include <ctime> #include <cmath> #include & ...
- luogu3704 [SDOI2017]数字表格(莫比乌斯反演)
link 设\(f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}(n\ge 2)\) 求\(\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)}\),多组询问, ...
- [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)
[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...
- [SDOI2017]数字表格 --- 套路反演
[SDOI2017]数字表格 由于使用markdown的关系 我无法很好的掌控格式,见谅 对于这么简单的一道题竟然能在洛谷混到黑,我感到无语 \[\begin{align*} \prod\limits ...
- 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]
数字表格 Time Limit: 50 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
随机推荐
- [BZOJ] 聚会
问题描述 Y 岛风景美丽宜人,气候温和,物产丰富.Y 岛上有 N 个城市,有 N-1 条城市间的道路连接着它们.每一条道路都连接某两个城市.幸运的是,小可可通过这些道路可以走遍 Y岛的所有城市. 神奇 ...
- MySQL5.7在Ubuntu上的安装、配置与使用
前言 服务器上安装东西一直是很让我头疼的事情,缘由:Linux基础不好.. 安装MySQL踩了很多坑,绕了很多弯路,这次踩得是tar包安装的坑... 当然,与tar包无关... 环境: Ubuntu ...
- locate 安装
locate http.conf locate apache2.conf .运行locate $ locate -bash: locate: command not found 提示找不到命令 .安装 ...
- java单双引号转义问题
JavaScript代码:var str = '<a href="javascript:;" onclick="visaDetail(\'1\',' + value ...
- Linux shell 归纳之 last
使用方法: 格式1:last -n n指定账号数量,最新前n个登陆信息(用户,终端,IP, 日期,时间和持续时间) 格式2:last -n <number of the latest accou ...
- 牛客 Rabbit的数列 (线段树维护值为x的个数+区间覆盖)
https://ac.nowcoder.com/acm/contest/907/C 链接:https://ac.nowcoder.com/acm/contest/907/C来源:牛客网 题目描述 Ra ...
- DataScope v1.0 多功能串口虚拟示波器使用介绍
DataScope v1.0 特性 1.无需安装,启动即用;2.支持同时刷新多达10个通道的单精度浮点型数据;3.支持多种格式的通道数据导入.导出及回放;4.支持全屏浏览;5.支持图表数据统计.测量及 ...
- JS - 迭代协议
Iteration protocols | MDN 可迭代协议(iterable protocol) 迭代器协议(iterator protocol)
- day36—javascript对表格table的操作应用(一)
转行学开发,代码100天——2018-04-21 今天记录一下,JavaScript对表格table的操作应用,包括表格元素的获取,创建,删除等. 一个普通的完整表格包括以下几个部分:table-&g ...
- java.io.IOException: Malformed \uxxxx encoding.
java.io.IOException: Malformed \uxxxx encoding. at com.dong.frame.util.ReadProperties.read(ReadProp ...