洛谷 P3704 [SDOI2017]数字表格(莫比乌斯函数)
题意:
求\[\prod\limits_{i=1}^n\prod\limits_{j=1}^mfib_{\gcd(i,j)}
\]\(T\) 组测试数据,\(1 \leq T \leq 10^3\),\(1 \leq n,m \leq 10^6\)
没啥好说的,直接推式子。
\]
设指数上的那一大堆玩意儿为 \(M\),那么
\]
\]
把括号里的东西预处理出来然后整除分块就行了
/*
Contest: -
Problem: P3704
Author: tzc_wk
Time: 2020.9.16
*/
#include <bits/stdc++.h>
using namespace std;
#define fi			first
#define se			second
#define pb			push_back
#define fz(i,a,b)	for(int i=a;i<=b;i++)
#define fd(i,a,b)	for(int i=a;i>=b;i--)
#define foreach(it,v) for(__typeof(v.begin()) it=v.begin();it!=v.end();it++)
#define all(a)		a.begin(),a.end()
#define fill0(a)	memset(a,0,sizeof(a))
#define fill1(a)	memset(a,-1,sizeof(a))
#define fillbig(a)	memset(a,0x3f,sizeof(a))
#define y1			y1010101010101
#define y0			y0101010101010
#define int long long
typedef pair<int,int> pii;
typedef long long ll;
inline int read(){
	int x=0,neg=1;char c=getchar();
	while(!isdigit(c)){
		if(c=='-') neg=-1;
		c=getchar();
	}
	while(isdigit(c)) x=x*10+c-'0',c=getchar();
	return x*neg;
}
const int MOD=1e9+7;
inline int qpow(int x,int e){
	if(!x) return 1;
	int ans=1;
	while(e){
		if(e&1) ans=ans*x%MOD;
		x=x*x%MOD;e>>=1;
	}
	return ans;
}
int f[1000005],mu[1000005],p[1000005],pcnt=0,F[1000005];
bool vis[1000005];
inline void prework(int n){
	f[1]=f[2]=1;
	for(int i=3;i<=n;i++)
		f[i]=(f[i-1]+f[i-2])%MOD;
	mu[1]=1;
	for(int i=2;i<=n;i++){
		if(!vis[i]){p[++pcnt]=i;mu[i]=-1;}
		for(int j=1;j<=pcnt&&p[j]*i<=n;j++){
			vis[i*p[j]]=1;
			if(i%p[j]==0) break;
			mu[i*p[j]]=-mu[i];
		}
	}
	for(int i=1;i<=n;i++) F[i]=1;
	for(int i=1;i<=n;i++){
		int inv=qpow(f[i],MOD-2);
		for(int j=i;j<=n;j+=i){
			if(!mu[j/i]) continue;
			else if(~mu[j/i]) F[j]=F[j]*f[i]%MOD;
			else F[j]=F[j]*inv%MOD;
		}
	}
	for(int i=2;i<=n;i++)
		F[i]=F[i-1]*F[i]%MOD;
}
signed main(){
	prework(1e6);
	int T=read();
	while(T--){
		int n=read(),m=read(),ans=1;
		for(int l=1,r;l<=min(n,m);l=r+1){
			r=min(n/(n/l),m/(m/l));
			ans=(ans*(qpow(F[r]*qpow(F[l-1],MOD-2)%MOD,(n/l)*(m/l)%(MOD-1))))%MOD;
		}
		printf("%lld\n",ans);
	}
	return 0;
}
洛谷 P3704 [SDOI2017]数字表格(莫比乌斯函数)的更多相关文章
- bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格
		洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ... 
- 洛谷P3704 [SDOI2017]数字表格(莫比乌斯反演)
		传送门 yyb大佬太强啦…… 感觉还是有一点地方没有搞懂orz //minamoto #include<cstdio> #include<iostream> #include& ... 
- 洛谷P3704 [SDOI2017]数字表格
		题目描述 Doris刚刚学习了fibonacci数列.用f[i]f[i] 表示数列的第ii 项,那么 f[0]=0f[0]=0 ,f[1]=1f[1]=1 , f[n]=f[n-1]+f[n-2],n ... 
- 洛谷 P3704 SDOI2017 数字表格
		题意: 给定两个整数 \(n, m\),求: \[\prod_{i = 1} ^ n \prod_{j = 1} ^ m \operatorname{Fib}_{\gcd\left(n, m\righ ... 
- 洛谷3704 [SDOI2017] 数字表格 【莫比乌斯反演】
		题目分析: 比较有意思,但是套路的数学题. 题目要求$ \prod_{i=1}^{n} \prod_{j=1}^{m}Fib(gcd(i,j)) $. 注意到$ gcd(i,j) $有大量重复,采用莫 ... 
- 洛咕 P3704 [SDOI2017]数字表格
		大力推式子 现根据套路枚举\(\gcd(i,j)\) \(ans=\Pi_{x=1}^nfib[x]^{\sum_{i=1}^{n/x}\sum_{j=1}^{n/x}[\gcd(i,j)=1]}\) ... 
- P3704 [SDOI2017]数字表格
		P3704 [SDOI2017]数字表格 链接 分析: $\ \ \ \prod\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} f[gcd(i, j)]$ $ ... 
- [Sdoi2017]数字表格 [莫比乌斯反演]
		[Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ... 
- P3704 [SDOI2017]数字表格  (莫比乌斯反演)
		[题目链接] https://www.luogu.org/problemnew/show/P3704 [题解] https://www.luogu.org/blog/cjyyb/solution-p3 ... 
随机推荐
- SharkCTF2021 fastcalc题记
			web --> python脚本编写练习. 直接访问发现全是乱码: 看包发现Content-Type里面没有charset=utf-8. 于是用python访问一下,用.encoding='ut ... 
- Java序列元素替换
			1.数组 直接赋值. 2.String (1) String是不可变的,只能将新的字符串重新赋给String变量.可使用substring进行拼接: String s="hello" ... 
- BUAA 2020 软件工程 提问回顾与个人总结
			BUAA 2020 软件工程 提问回顾与个人总结 Author: 17373051 郭骏 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾 ... 
- springcloud整合seata
			springcloud整合seata 一.背景 二.项目结构 三.实现功能: 四.项目使用到的技术 五.整合步骤 1.引入spring-cloud-starter-alibaba-seata jar包 ... 
- Kotlin/Native 用KMM写Flutter插件
			一.用KMM写Flutter插件 Google官方有一个写Flutter例子How to write a Flutter plugin,这里把Google plugin_codelab 例子改成用KM ... 
- [BZOJ3307] 雨天的尾巴-----------------线段树进阶
			虽然是个板子,但用到了差分思想. Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最 ... 
- 要想玩转FPGA,按这4个步骤来
			FPGA 作为一种高新技术,由于其结构的特殊性,可以重复编程,开发周期较短,越来越受到电子爱好者的青睐,其应用已经逐渐普及到了各行各业.因此,越来越多的学生或工程师都希望跨进FPGA的大门掌握这门技术 ... 
- 洛谷 P2120 [ZJOI2007] 仓库建设
			链接: P2120 题意: 有 \(n\) 个点依次编号为 \(1\sim n\).给出这 \(n\) 个点的信息,包括位置 \(x_i\),所拥有的的物品数量 \(p_i\),在此建设一个仓库的费用 ... 
- Python NameError:name ‘xrange’ is not defined
			在python3 中会出这个问题,而xrange( )函数时在python 2.x中的一个函数,在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange ... 
- 原串反转 牛客网 程序员面试金典 C++ Python
			原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ... 
