首页 > 其他分享 >[ARC050C] LCM 111

[ARC050C] LCM 111

时间:2023-10-04 21:23:18浏览次数:36  
标签:10 bf frac gcd ARC050C LL 111 Pow LCM

[ARC050C] LCM 111

给定三个数 \(a,b,P\),令 \(x\) 由 \(a\) 个 \(1\) 拼接而成,\(y\) 由 \(b\) 个 \(1\) 拼接而成,求 \(\operatorname{lcm}(x,y)\) 模 \(P\) 的值。

\(1\le a,b\le 10^{18}\),\(2\le P\le 10^9\).


即 \(\displaystyle x=\frac{10^a-1}{9},y=\frac{10^b-1}{9}\),不妨先求 \(\gcd(10^a-1,10^b-1)\).

  • \(\gcd(x^n-1,x^m-1)=x^{\gcd(n,m)}-1\).

考虑辗转相除:

\[\gcd(x^n-1,x^m-1)=\gcd(x^n-x^m,x^m-1) \]

\[=\gcd(x^m(x^{n-m}-1),x^m-1) \]

由于 \(x^m\perp x^m-1\):

\[\gcd(x^n-1,x^m-1)=x^{\gcd(n,m)}-1 \]

答案即

\[\frac{(10^a-1)(10^b-1)}{9\cdot(10^{\gcd(a,b)}-1)} \]

方便地,令 \(c\leftarrow\gcd(a,b)\),\(a\leftarrow \frac{a}{c}\),\(b\leftarrow \frac{b}{c}\).

把答案变为

\[\frac{10^c-1}{9}\cdot\frac{10^{ac}-1}{10^c-1}\cdot\frac{10^{bc}-1}{10^c-1} \]

  • \(\displaystyle 10^{ac}-1=(10^c-1)(\sum_{i=0}^{a-1}10^{ic})\).

考虑把这个 \(ac\) 位数分成 \(a\) 个大小为 \(c\) 的部分,那么它们最终都是全为 \(9\) 的块,可得上式。

即求

\[(\sum_{i=0}^{c-1}10^i)\cdot(\sum_{i=0}^{a-1}10^{ic})\cdot(\sum_{i=0}^{b-1}10^{ic}) \]

三个式子均可分治得出。这样就不需要处理麻烦的逆元了。

//by Shui_Dream
#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL a,b,c,P;
LL Pow(LL x,LL kx){
	LL y=1;
	while(kx){
		if(kx & 1) y=y*x%P;
		kx>>=1; x=x*x%P;
	}
	return y;
}
LL s1(LL n,LL c){
	if(!n) return 1;
	LL bf=s1(n>>1,c); bf=(bf+Pow(Pow(10,(n>>1)),c)*(bf-1+P))%P;
	if(n & 1) (bf+=Pow(Pow(10,n),c))%=P;
	return bf;
}
LL s2(LL n){
	if(!n) return 1;
	LL bf=s2(n>>1); bf=(bf+Pow(10,n>>1)*(bf-1+P)%P)%P;
	if(n & 1) (bf+=Pow(10,n))%=P;
	return bf;
}
int main(){
	scanf("%lld%lld%lld",&a,&b,&P); c=__gcd(a,b); a/=c; b/=c;
	LL res=s1(a-1,c)*s1(b-1,c)%P*s2(c-1)%P;
	printf("%lld",res);
	return 0;
}

标签:10,bf,frac,gcd,ARC050C,LL,111,Pow,LCM
From: https://www.cnblogs.com/SError0819/p/17742762.html

相关文章

  • 题解 CF1034C【Region Separation】/ SS221116D【Xiong AK 10 IOI】
    很妙的性质题!全是意识流证明见过吗?problem每次选一个非空边集删掉,谓之曰砍树。砍树后需要满足每个连通块的点权和相同。在一个方案中可以砍很多次树,都要满足砍树后的要求。一共有多少种合法方案呢?\(n\leq10^6,1\leqa_i\leq10^9\)。solution假如我们将树砍成\(k\)个连通......
  • 111
    格式符 说明d(或i) 以带符号的十进制形式输出整数,正数的(+)号省略不输出。u 以无符号十进制形式输出整数。x(或X) 以十六进制无符号形式输出整数。(不输出前导符0x).o(字母) 以八进制无符号形式输出整数。(不输出前导符数字0).c 输出一个字符。s 输出字......
  • P1119 灾后重建
    题目传送:链接思路算法:\(Floyd.\)每次询问记录一个变量\(n\),表示当前遍历到哪个点。当\(t_n<=T\)的时候,利用\(n\)点更新到$(x,y)$点的最短路。如果发现\(x,y\)点其中有一个还没有修好,或者是\(d_{x_y}\)为0x3f3f3f3f,就输出\(-1\)。代码#include<bits/s......
  • 20211128《信息安全系统设计与实现》第七、八章笔记
    一、任务内容自学教材第7,8章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT......
  • 20211105李宜时《信息安全系统设计与实现》第四周学习总结
    第七第八章学习笔记学习笔记:文件操作和系统调用文件操作级别文件操作通常可以分为三个级别:低级别文件操作:直接访问文件的二进制数据,通常由操作系统提供支持。文件I/O操作:使用高级别的API(如C的stdio库)来读取和写入文件。文件系统操作:使用文件系统调用访问和管理文件,如POSIX......
  • 【题解】CF1110D Jongmah(DP)
    【题解】CF1110DJongmah代码很短,但是思路我怎么也想不到的神仙DP。题意概述你在玩一个叫做Jongmah的游戏,你手上有\(n\)个麻将,每个麻将上有一个在\(1\)到\(m\)范围内的整数\(a_i\)。为了赢得游戏,你需要将这些麻将排列成一些三元组,每个三元组中的元素是相同的或者连......
  • AT_arc111_a 题解
    洛谷连接&Atcoder链接题目简述给定两个数\(n\)和\(m\),输出\(\left\lfloor\frac{10^n}{m}\right\rfloor\bmodm\)的值。数据范围:\(n\le10^{18},m\le10^4\)思路首先看到数据范围还是很大的,直接快速幂会炸,所以需要一些优化操作。推理如下:\[\left\lfloor\frac{10^n}......
  • [ARC124C] LCM of GCDs 题解
    题面给定\(N\)个正整数对\((a_i,b_i)\)和两个初始为空的集合\(S,T\),你可以选择将每个数对的两个元素划分到两个不同的集合中。求\[\max\operatorname{lcm}(\gcd\limits_{x\inS}x,\gcd\limits_{y\inT}y)\](\(1\leN\le50,1\lea_i,b_i\le10^9\))。题解首先,......
  • P1111 修复公路
    并查集模板题只要按时间从小到达排序,然后加入并查集中即可,维护最大值。如果并查集的数量等于n,则直接退出即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;structnode{ intu,v,t; booloperator<(constnode&a)const{ re......
  • #20211105李宜时《信息安全系统设计与实现》第三周学习总结
    20211105李宜时《信息安全系统设计与实现》第三周学习总结学习不同编程语言的必备要素和技能1.语法和基本结构了解编程语言的语法和基本结构是编程的第一步。这包括变量、数据类型、运算符、条件语句、循环结构等。以下是Python、C和Java中的示例代码片段:Python#定义变量并......