【BZOJ4816】数字表格(莫比乌斯反演)
【BZOJ4816】数字表格(莫比乌斯反演)
题面
BZOJ
求
\]
题解
忽然不知道这个要怎么表示。。。
就写成这样吧。。
\]
直接把\(f[d]\)提出来
\]
上面那个东西用莫比乌斯反演+数论分块可以\(O(\sqrt n)\)求
外面套的这一层也可以数论分块求
于是,我们就得到了一个\(O(n)\)的做法
但是显然还不够
把上面那坨东西拎出来看
\]
太熟悉了
\]
还是老套路,
令\(T=id\)
直接把\(T\)在整个式子里面提出来
\]
有一些一样的东西
\]
然后怎么办。。。。
很明显,已经可以对\([n/T][m/T]\)分块了
那。。。里面的东西怎么办。。。
又不能线性筛。。。
喂喂。。。不能线性筛就暴力算呀
数据范围\(10^6\)
每个数暴力算到他的倍数里面去
也就是\(\frac{n}{1}+\frac{n}{2}+.....\frac{n}{10^6}\)
这个东西也就是\(15n\)的样子
所以直接暴力把那个东西的前缀给求出来
就可以做到\(O(\sqrt n)\)求解了
补充几个问题
求\([\frac{n}{i}][\frac{m}{i}]\)次方的时候,可以直接膜一个\(1e9+6\)
这样会块很多。。。
然后就是斐波那契数列的逆元提前算出来
要不然在暴力求解的时候就会多个\(log\)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MOD 1000000007
#define MAX 1000000
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int fpow(int a,int b)
{
int s=1;
while(b){if(b&1)s=1ll*a*s%MOD;a=1ll*a*a%MOD;b>>=1;}
return s;
}
int f[MAX+10],pri[MAX],tot;
int g[MAX+10];
int inv[MAX+10];
int F[MAX+10];
int mu[MAX+10];
bool zs[MAX+10];
int n,m;
void pre()
{
f[1]=g[1]=F[0]=F[1]=1;
mu[1]=1;zs[1]=true;
for(int i=2;i<=MAX;++i)
{
f[i]=(f[i-1]+f[i-2])%MOD;
g[i]=fpow(f[i],MOD-2);F[i]=1;
if(!zs[i])pri[++tot]=i,mu[i]=-1;
for(int j=1;j<=tot&&i*pri[j]<=MAX;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j])mu[i*pri[j]]=-mu[i];
else{break;}
}
}
for(int i=1;i<=MAX;++i)
{
if(!mu[i])continue;
for(int j=i;j<=MAX;j+=i)
F[j]=1ll*F[j]*(mu[i]==1?f[j/i]:g[j/i])%MOD;
}
for(int i=2;i<=MAX;++i)F[i]=1ll*F[i]*F[i-1]%MOD;
}
int main()
{
pre();
int T=read();
while(T--)
{
n=read(),m=read();
if(n>m)swap(n,m);
int i=1,j,inv,ans=1;
while(i<=n)
{
j=min(n/(n/i),m/(m/i));
inv=1ll*F[j]*fpow(F[i-1],MOD-2)%MOD;
ans=1ll*ans*fpow(inv,1ll*(n/i)*(m/i)%(MOD-1))%MOD;
i=j+1;
}
printf("%d\n",(ans+MOD)%MOD);
}
return 0;
}
【BZOJ4816】数字表格(莫比乌斯反演)的更多相关文章
- [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)
[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...
- 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]
数字表格 Time Limit: 50 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...
- 【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 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- 【bzoj2154】Crash的数字表格 莫比乌斯反演
题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如,LCM(6, ...
- [Sdoi2017]数字表格 [莫比乌斯反演]
[Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...
- 【BZOJ】2154: Crash的数字表格 莫比乌斯反演
[题意]给定n,m,求Σlcm(i,j),1<=i<=n,1<=j<=m,n,m<=10^7. [算法]数论(莫比乌斯反演) [题解] $$ans=\sum_{i\leq ...
- [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∑Ny=1∑Mlim(x, ...
- BZOJ.4816.[SDOI2017]数字表格(莫比乌斯反演)
题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 这个好像简单些啊,只要不犯sb错误 [Update] 真的算反演中比较裸的题了... \(Descriptio ...
随机推荐
- 【应知应会】15个常用的JavaScript字符串操作方法
1 初始化 //常用初始化方法 var stringVal = "hello iFat3"; //构造函数创建方法 var stringObj = new String(" ...
- 0基础学python3心得体会 - python3学习笔记 - python3基础
基础预热 print()会依次打印每个字符串,遇到逗号","会输出一个空格,可以打印整数,或者计算 结果 Python提供了一个input(),,可以让用户输入字符串,并存放到一个 ...
- Java经典编程题50道之四十七
读取7个数(1~50)的整数值,每读取一个值,程序打印出该值个数的*. public class Example47 { public static void main(String[] arg ...
- Python print 输出到控制台 丢数据
import xlrd import sys,time data = xlrd.open_workbook("C:\Users\Administrator\Desktop\\new1.xls ...
- PHP封装的一个单例模式Mysql操作类
掌握满足单例模式的必要条件----三私一公. ①私有的构造方法-为了防止在类外使用new关键字实例化对象. ②私有的成员属性-为了防止在类外引入这个存放对象的属性. ③私有的克隆方法-为了防止在类外通 ...
- mysql 导出每张表中的100条数据..............
windows下配好MYSQL 环境变量,cmd 然后: mysqldump -uroot -p123 [数据库名]--where "1=1 limit 100" --lock-a ...
- PDO学习
参考: http://php.net/manual/zh/pdostatement.fetch.php http://php.net/manual/zh/pdo.constants.php
- 跨域问题jsonp
不得不说的同源政策: 同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指域名,协议,端口相同.当一个浏览器的两个tab页 ...
- python语言中的AOP利器:装饰器
一.前言 面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java ...
- 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型
本文部分内容来源于CDA深度学习实战课堂,由唐宇迪老师授课 如果你企图用CPU来训练模型,那么你就疯了- 训练模型中,最耗时的因素是图像大小size,一般227*227用CPU来训练的话,训练1万次可 ...