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

[SDOI2017] 数字表格

时间:2023-07-31 21:45:52浏览次数:50  
标签:lfloor frac 数字 表格 mo mu SDOI2017 ll fo

传送门

跟YY的gcd如出一辙,得到一个显然的柿子

\[\prod_{k} F_{k}^{z} \]

\[z= \sum _{d} \mu(d) \lfloor\frac{n}{kd} \rfloor \lfloor\frac{m}{kd} \rfloor \]

那么我们设T=kd,

\[\prod _{T} \prod _{k|T} F_{k}^x \]

\[x=\mu(\frac{T}{k}) \lfloor\frac{n}{T} \rfloor \lfloor\frac{m}{T} \rfloor \]

注意到对于一块来说$$\lfloor\frac{n}{T} \rfloor \lfloor\frac{m}{T} \rfloor$$都是相同的。

我们只需处理

\[\prod _{k|T} F_{k}^y \]

的前缀积,以及逆元的前缀积即可

\[y=\mu( \frac{T}{k}) \]

#include<cstdio>
#include<algorithm>
#include<cstring>
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define A puts("YES")
#define B puts("NO")
using namespace std;
typedef long long ll;
const ll mo=1e9+7;
const int N=1e6+5;
int p[N],tot,mu[N];
int j,k;
ll ans,f[N],x,inv[N],z,t[N],n,m,r;
bool vis[N];
ll power(ll a,ll b){
	ll t=1,y=a%mo;
	while (b) {
		if (b&1) t=t*y%mo;
		y=y*y%mo;
		b/=2;
	}
	return t;
}
int main(){
//	freopen("data.in","r",stdin);
	f[0]=0; f[1]=1;
	inv[1]=1;
	fo(i,2,N-1) {
		f[i]=(f[i-1]+f[i-2])%mo;
		inv[i]=power(f[i],mo-2);
	}
	
	mu[1]=1;
	fo(i,2,N-1){
		if (!vis[i]) {
			mu[i]=-1;
			p[++tot]=i;
		}
		fo(j,1,tot) {
			if ((ll)i*(ll)p[j] >= N) break;
			vis[i*p[j]]=1;
			if (i%p[j]==0) {
				break;
			}
			else {
				mu[i*p[j]]=-mu[i];
			}
		}	
	}
	
	
	fo(i,0,N-1) t[i]=1;
	fo(i,1,N-1) {
		fo(j,1,(N-1)/i) {
			if (mu[j]==0) z=1;
			if (mu[j]==1) z=f[i];
			if (mu[j]==-1) z=inv[i];
			
			t[i*j]=t[i*j]*z%mo;
		}
	}

	fo(i,1,N-1) t[i]=t[i]*t[i-1]%mo;
	inv[0]=1;
	fo(i,1,N-1) {
		inv[i]=power(t[i],mo-2);
	}
	
	int Q;
	scanf("%d",&Q);
	while (Q--){
		ans=1;
		scanf("%lld %lld",&n,&m);
		
		j=1;
		while (j<=min(n,m)) {
			r=min(n/(n/j), m/(m/j));
			
			z=t[r]*inv[j-1]%mo;
			z=power(z,(n/j)*(m/j));
			ans=ans*z%mo;
			j=r+1;
		}
		
		printf("%lld\n",ans);
	
	}
	
	return 0;
}

标签:lfloor,frac,数字,表格,mo,mu,SDOI2017,ll,fo
From: https://www.cnblogs.com/ganking/p/17594562.html

相关文章

  • SCAP智能渠道接入平台:打破行业壁垒,推动数字化时代的企业转型
    在当今数字化时代,人们的生活和工作方式正在发生着巨大的变化。越来越多的企业和个人开始依赖于各种数字化产品和服务,而这些产品和服务往往需要通过对接各种外部三方渠道来实现。然而不同的渠道之间存在着巨大的差异,例如接口协议、数据格式、安全性等方面的差异,这给对接工作带来了极......
  • 数字孪生系统融合GIS系统能够在洪涝灾害防治上带来什么帮助?
    数字孪生技术与GIS系统的融合,为防治洪涝灾害方式带来了巨大的改变。这种整合的力量超越了过去单一技术的局限,为防洪抗灾工作提供了更全面、更准确的决策支持和应急响应能力。在过去,防洪抗灾工作主要依赖于传统的地理信息系统(GIS)来收集和分析洪涝灾害的空间数据。虽然GIS系统在空......
  • 建设数字工厂:MRP物料需求计划的逻辑原理与配置方法
    本文分享自华为云社区《数字工厂深入浅出系列(七):MRP物料需求计划的逻辑原理与配置方法》,作者:云起MAE。MRP是生产制造企业“管好”物料的核心工具方法,基本思想是根据客户对最终产品的需求数量和需求时间,按产品的结构精确地算出所有零件和部件的数量,并按各种零件和部件的生产周期或......
  • java生成16位数字
    如何使用Java生成16位数字作为一名经验丰富的开发者,我将教会你如何使用Java生成16位数字。下面是整个过程的步骤:步骤描述1导入相关的包2创建一个Random对象3生成一个16位的随机数4将随机数转换为字符串现在,让我们一步步来实现这些步骤。步骤1:导入相......
  • 智能制造、智慧城市:数字孪生赋能智慧未来
    数字孪生是一项引人瞩目的技术,其重要性在于为现实世界提供了强大的数字化支持和模拟能力。本文将探讨数字孪生的重要性,以及它在各个领域的应用和优势。 一、数字孪生的重要性数字孪生是一种将现实世界数字化的技术,通过建立与现实世界相对应的虚拟副本,实现了现实与虚拟之间的无......
  • VUE el-table表格实现双击编辑,单机空白处放弃修改,回车提交修改
    VUEel-table表格实现双击编辑,单机空白处放弃修改,回车提交修改template<el-row><el-col:span="24"><el-table@cell-dblclick="handleCellDBClick":data="tabledata"border><!--生成列--><......
  • 我坦白我有厌蠢症,讨厌蠢货,讨厌数字垃圾制造者,博客加密码了
    截至今日,写技术博客6年半了写下每一篇的时候都意味着在一个技术领域发现了大量数字垃圾由于我极度讨厌蠢货,讨厌数字垃圾制造者所以,每篇文章都是调试通过后纪录部分文章阅读量还不少但都是白嫖党,帮他们解决了问题,结果连句谢谢都没有今天开始编写一个爬虫,把每篇文章都......
  • 介绍壹牛NFT数字艺术藏品数藏源码
    这个版本新增了不少功能,也修复了一些地方。1.平台新增用户找回密码功能2.平台新增短信注册(实名制功能)3.平台新增主图后台添加功能4.平台修复相关问题,系统高效运行5、H5端与APP端在新UI完美适配6、加入宝盒功能(抽奖)多种材料合成玩法(合成宝石)7、加入3D模型显示8、全新UI......
  • 新数字时代的黎明:深入探讨扩展现实
    介绍在技术快速发展的时代,一项创新站在改变我们与数字信息交互方式的最前沿:扩展现实(XR)。这个术语统称为沉浸式技术,将我们的物理世界与虚拟环境融合在一起,有望以以前只能在科幻小说中想象的方式彻底改变我们的体验。扩展现实包含三种主要技术:虚拟现实(VR)、增强现实(AR)和混合现实......
  • ChatGPT炒股:自动批量提取股票公告中的表格并合并数据
    在很多个股票公告中,都有同样格式的“日常性关联交易”的表格,如何合并到一张Excel表格中呢?首先,在ChatGPT中输入提示词:写一段Python代码:F盘文件夹“新三板2023年日常性关联交易20230704”中很多个PDF文件,用Tabula提取这些PDF文件中第1页中的第2个表格,然后保存到表格文件中,文件标题......