首页 > 其他分享 >P3704 [SDOI2017]数字表格

P3704 [SDOI2017]数字表格

时间:2023-05-30 12:56:26浏览次数:45  
标签:lfloor frac 表格 int sum P3704 ln SDOI2017 mod

简要题意

令 \(f(i)\) 为斐波那契数列第 \(i\) 项的值。

\(T\) 组数据,对于每一个 \(n,m\),求出:

\[\prod_{i=1}^{n}\prod_{j=1}^{m}f(\gcd(i,j))\pmod{10^9+7} \]

\(1 \leq T \leq 10^3,1 \leq n,m\leq 10^6\)

思路

这里将介绍一种自认为比题解更为简便的方法

首先原式有 \(\prod\) 非常难搞,如果是 \(\sum\) 就好了。为了向毒瘤题 P5518 [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题 致敬,这里我们使用 \(\ln+\exp\) 大法。

下面令 \(n\leq m\)。

将原式取 \(\ln\) 得:

\[\begin{aligned} &\sum_{i=1}^{n}\sum_{j=1}^{m}\ln(f(\gcd(i,j)))\\ &=\sum_{d=1}^{n}\ln(f(\gcd(i,j)))\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=d]\\ &=\sum_{d=1}^{n}\ln(f(\gcd(i,j)))\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(i)\lfloor\frac{n}{di}\rfloor\lfloor\frac{m}{di}\rfloor\\ &=\sum_{d=1}^{n}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor\sum_{k|d}(\ln(f(k))\cdot\mu(\frac{d}{k})) \end{aligned} \]

令 \(g(d)=\sum_{k|d}(\ln(f(k))\cdot\mu(\frac{d}{k}))\),对其取 \(\exp\) 得 \(G(d)=\prod_{k|d}f(k)^{\mu(\frac{d}{k})}\)。显然这个可以 \(O(n\log n)\) 预处理。

然后对原式取 \(\exp\) 得:

\[\prod_{d=1}^{n}G(d)^{\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor} \]

对 \(G\) 求预处理前缀积,可以使用数论分块做到 \(O(\sqrt{n}\log n)\)。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1e6+5;
int vis[N],mu[N],pri[N],tot,fib[N],f[N],inv[N];
const int mod = 1e9+7;

int pow(int a,int b,int mod) {
	int ans=1;
	for(; b; b>>=1,a=1ll*a*a%mod) {
		if(b&1) {
			ans=1ll*ans*a%mod;
		}
	}
	return ans;
}

int M(const int x){
	return (x%mod+mod)%mod;
}

void sieve(int ZYB = 1e6){
	mu[1]=vis[1]=fib[1]=f[1]=f[0]=inv[1]=1;
	for(int i=2;i<=ZYB;i++){
		fib[i]=M(fib[i-1]+fib[i-2]);
		f[i]=1;
		inv[i]=pow(fib[i],mod-2,mod);
		if(!vis[i]){
			pri[++tot]=i;
			mu[i]=-1;
		}
		for(int j=1;j<=tot&&i*pri[j]<=ZYB;j++){
			vis[i*pri[j]]=1;
			if(i%pri[j]) mu[i*pri[j]]=-mu[i];
			else break;
		}
	}
	for(int i=1;i<=ZYB;i++){
		for(int j=i;j<=ZYB;j+=i){
			f[j]=1ll*f[j]*(mu[i]==1?fib[j/i]:(mu[i]==0?1:inv[j/i]))%mod;
		}
	}
//	for(int i=2;i<=ZYB;i++) cout<<f[i]<<' ';
	for(int i=2;i<=ZYB;i++){
		f[i]=M(f[i]*f[i-1]);
//		cout<<f[i]<<' ';
	}
}

signed main(){
	sieve();
	int t;cin>>t;
	while(t--){
		int n,m;
		cin>>n>>m;
		if(n>m) swap(n,m);
		int ans=1;
		for(int l=1,r=0;l<=n;l=r+1){
			r=min(n/(n/l),m/(m/l));
			int ret=M(f[r]*pow(f[l-1],mod-2,mod));
			ans=M(ans*M(pow(ret,(n/l)*(m/l)%(mod-1),mod)));
		}
		cout<<M(ans)<<'\n';
	}
}

标签:lfloor,frac,表格,int,sum,P3704,ln,SDOI2017,mod
From: https://www.cnblogs.com/zheyuanxie/p/p3704.html

相关文章

  • laravel导出excel表格中带图片
    1.用到扩展$dat=[];foreach($resDBas$k=>$v){$dat[$k]=['style_no'=>$v['style_no'],'style_name'=>$v['style_name'],......
  • 自定义表单设计器助您随心所欲定制专属表格!
    在新的发展时代,传统的表格设计器已经无法满足日愈繁杂的办公需求。那么,如何来定制专属的办公表格?其实,这也不是一件难事,只需要了解自定义表单设计器就行。在快速发展的现代化社会中,低代码开发平台也迎来了蓬勃的发展商机,它的灵活、简便和易操作等优势在无数行业办公领域深受喜爱,也......
  • TransformMine图片表格化安卓APP
    TransformMine图片表格化安卓APP展示: 部分代码:<?xmlversion="1.0"encoding="utf-8"?><com.scwang.smart.refresh.layout.SmartRefreshLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://s......
  • 对element Table表格中的el-input输入框输入的数值进行自定义校验
           参考:https://blog.csdn.net/weixin_48145150/article/details/125292650      https://blog.csdn.net/m0_59951344/article/details/119818786......
  • Python实现将Excel表格按某列拆分为多个sheet
    <生信交流与合作请关注公众~号@生信探索>实际数据分析中遇到需求,把某个Excel表格按照某一列分为多个sheet,并且要求如果某个key对应的行数较少应该合并到一个sheet中。importpandasaspdimportbioquestasbq#https://jihulab.com/BioQuest/bioquest从网上找随便了个数据......
  • INFINI Labs 产品更新 | Console 新增数据比对、新增数据看板表格组件及支持下钻功能
    INFINILabs产品更新啦~,本次产品版本更新包括Gatewayv1.14.0、Consolev1.2.0、Easysearchv1.1.1等,其中Console在上一版基础上做了很多优化改进以及新增了一些特性,如新增数据比对校验功能、数据看板模块新增了表格组件、图表组件支持下钻功能等。欢迎下载体验。INFINIGat......
  • Excel表格和Unity
    Excel表格和Unity1.配置下载EPPlus.dll链接:https://pan.baidu.com/s/1l0FYTf8nATrPdEt6fXJ6Kg?pwd=1111提取码:1111将dll文件拖拽到Assets/PluginsAssets下新建文件夹Editor,右键Editor点击ShowinExplorer,新建Excel表格文件(后缀.xlsx),表格文件放在Assete/Editor中。2.读取表......
  • 表格编辑时,根据这一行弹出层显示编辑界面,点击保存时发送请求,请求成功保存好数据到表达
    这是一个网上的列子,一表格,点击编辑时弹出层编辑这一行,点击保存时送请求的完整示例:<template><div><el-table:data="tableData"style="width:100%"><el-table-columnprop="name"label="姓名"></el-table-column>......
  • elementUI使用之table表格如何给行元素添加点击事件
    官方文档提供的event事件在代码中绑定事件在methods中写方法好了,这样就可以实现了。......
  • 普加项目管理中间件示例之二:自定义表格列
    自定义表格列示例demo/diyColumns.html上文介绍了标准列,这里介绍一下自定义列。正如标准列是一些预设好的对象,自定义列也是一个对象。支持多种数据类型的列:String、Number、Boolean、Date、Array等支持多种单元格编辑器:TextBox、Spinner、CheckBox、DatePicker、ComboBox、TreeSel......