AtCoder Beginner Contest 293 E - Geometric Progression 无法求逆元/数列通项
创始人
2024-06-02 03:42:42
0

传送门:ATcoder

题目描述:

Given integers A, X, and M,find ∑i=0X−1Ai\sum\limits_{i=0}^{X-1}Aii=0∑X−1​Ai,modulo M

输入:
1000000000 1000000000000 998244353
输出:
919667211

首先X的范围达到了1e121e121e12,所以O(X)O(X)O(X)的算法肯定是过不了的.

然后当时我赛时就想起来之前有一次我做过一道自幂的题目,然后对与一个数不断自幂取模来说,必存在一个循环节.这个我在上述链接中已经有详细证明+解释,此处就不在赘述了.然后我就基于循环节的想法去打这道题.复杂度应该是低于O(M)O(M)O(M)的.但是可能是因为取模运算比较慢,所以最后是TLE了.

然后现在讲一下正解.首先假设你没有像我一样sb的去用循环节去做这道题,那么你应该不难发现AiA^iAi是一个等比数列,那么原题就是一道等比数列求和的题目,那么你可能十分的激动直接开做,1−qX1−X\frac{1-q^X}{1-X}1−X1−qX​,分子只用快速幂可以解决,但是你会发现分母需要使用逆元,但是这个逆元可能是不存在的(可以证明,但是比较麻烦).所以不能直接求.

我们可以换一种想法就是将∑i=0X−1Ai\sum\limits_{i=0}^{X-1}Aii=0∑X−1​Ai看成是一个等比数列的一个通项,也就是设一个Ci=∑i=0X−1AiCi=\sum\limits_{i=0}^{X-1}AiCi=i=0∑X−1​Ai,可以显然的发现CiCiCi本身就是一个等比数列,所以我们现在的任务就是求出CX的值即可.我们可以发现Ci=C(i−1)∗A+1Ci=C(i-1)*A+1Ci=C(i−1)∗A+1对于这种数列题,可以使用矩阵来快速解决

考虑有
[Ci]=[A1]∗[Ci−11]\left[ \begin{matrix} Ci \end{matrix} \right]=\left[ \begin{matrix} A&1 \end{matrix} \right]*\left[ \begin{matrix} Ci-1 \\ 1 \end{matrix} \right][Ci​]=[A​1​]∗[Ci−11​]

但是为了满足矩阵乘法的正确性(行数相同),我们补充一下两边矩阵

[Ci1]=[A101]∗[Ci−11]\left[ \begin{matrix} Ci \\ 1\end{matrix} \right]=\left[ \begin{matrix} A&1 \\ 0 & 1 \end{matrix} \right]*\left[ \begin{matrix} Ci-1 \\ 1 \end{matrix} \right][Ci1​]=[A0​11​]∗[Ci−11​]

定义初始矩阵为C0=[01]C0=\left[ \begin{matrix} 0 \\ 1 \end{matrix} \right]C0=[01​]
那么C1=[A101]∗[01]C1=\left[ \begin{matrix} A & 1 \\ 0 & 1 \end{matrix} \right]*\left[ \begin{matrix} 0 \\ 1 \end{matrix} \right]C1=[A0​11​]∗[01​]

那么CX=[A101]x∗[01]CX=\left[ \begin{matrix} A & 1 \\ 0 & 1 \end{matrix} \right]^{x}*\left[ \begin{matrix} 0 \\ 1 \end{matrix} \right]CX=[A0​11​]x∗[01​]

然后我们直接使用矩阵快速幂来迅速解决这道题即可

下面是具体的代码部分:

#include 
using namespace std;
typedef long long ll;
#define root 1,n,1
#define ls rt<<1
#define rs rt<<1|1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
#define int long long
#define maxn 1000000
const double eps=1e-8;
#define	int_INF 0x3f3f3f3f
#define ll_INF 0x3f3f3f3f3f3f3f3f
int Mod,A,X;
int ans[10][10],x[10][10],c[10][10];
void x_pow() {for(int i=0;i<2;i++) {for(int j=0;j<2;j++) {c[i][j]=x[i][j];x[i][j]=0;}}for(int i=0;i<2;i++) {for(int j=0;j<2;j++) {for(int k=0;k<2;k++) {x[i][j]=(x[i][j]+c[i][k]*c[k][j]%Mod)%Mod;}		}}
}
void ans_pow() {for(int i=0;i<2;i++) {for(int j=0;j<1;j++) {c[i][j]=ans[i][j];ans[i][j]=0;}}for(int i=0;i<2;i++) {for(int j=0;j<1;j++) {for(int k=0;k<2;k++) {ans[i][j]=(ans[i][j]+x[i][k]*c[k][j]%Mod)%Mod;}}}
}
void juzhen_qpow(int k) {while(k) {if(k&1) ans_pow();k>>=1;x_pow();}
}
signed main() {A=read(),X=read(),Mod=read();x[0][0]=A;x[0][1]=1;x[1][0]=0;x[1][1]=1;ans[0][0]=0;ans[1][0]=1;juzhen_qpow(X);cout<

相关内容

热门资讯

“入赛道” 刮起民族风 转自:中国旅游报 □ 本报记者 郝 宁 2月中旬,云南曲靖罗平县的油菜花进入盛花期,连片油菜花陆续盛...
深圳“民意速办”助营商环境再升...   羊城晚报讯 记者李晓旭报道:营商环境是企业生存发展的土壤,政务服务是滋养创新的活水。作为改革开放...
广西代表团提交议案建议336件   广西云-《广西日报》讯 3月10日,受十四届全国人大三次会议广西代表团委托,广西代表团新闻发言人...
稳存量拓增量提质量 让就业政策...   就业是民生之本,一头连着万家灯火,一头系着经济大局,再怎么重视都不为过。今年政府工作报告提出,更...
公路通旅游兴 村民生活好起来 转自:中国旅游报 □ 本报记者 郭子腾 “我想讲讲农村路带动阿布洛哈村发展的故事。”全国两会期间,全...
招商银行(03968.HK)获... 格隆汇3月11日丨根据联交所最新权益披露资料显示,2025年3月5日,招商银行(03968.HK)获...
“00后用DeepSeek日卖...   羊城晚报记者 杭莹  用AI工具赚钱的故事越来越魔幻了。3月10日,“00后用DeepSeek日...
中山福彩开展综合管理员首场业务...   为加强福彩基层管理队伍建设,提升综合管理员专业素养,中山市福利彩票发行中心于近日开展了2025年...
让年轻“合伙人”在乡村振兴中找... 决定从城市回到云南省楚雄彝族自治州牟定县时,全国人大代表金瑞瑞不会想到,“回到乡村”这件事,把她带到...
广东代表团提出9件议案、499...   羊城晚报讯 特派北京记者侯梦菲报道:3月10日,十四届全国人大三次会议广东代表团举行第二场新闻发...
百万豪车自燃后保险公司拒赔   羊城晚报记者 文聪  通讯员 胡敏怡  “3·15”国际消费者权益日临近,东莞市第一人民法院发布...
家电行业开启“AI+”竞赛,抢... 大模型加速“进化”,掀起新一轮人工智能发展热潮。今年政府工作报告提出,持续推进“人工智能+”行动,将...
一部讲海底史前章鱼的纪录片 一部讲海底史前章鱼的纪录片不是科幻片,是纪录片。深海探测器下潜到很深的地方,发现了红色的大章鱼,眼睛...
红月 怎么用变速齿轮0.45 红月 怎么用变速齿轮0.45就先开变速,开的时候就先设定好要变速的倍数,设定好热键在进然后在游戏里按...
年过70的萧太后,为何能让唐太... 年过70的萧太后,为何能让唐太宗厚待她?  年过70的萧太后却能够让...
谁有桐华的《殇》,不要《曾许诺... 谁有桐华的《殇》,不要《曾许诺》,谢谢!已发送,请注意查收O(∩_∩)O~
德牧 耳朵不会竖 德牧 耳朵不会竖我家的德牧,3个多月吧。本来耳朵一直竖着的,但前天误食老鼠药,打完针,救回来了,但耳...
悟阳明心学,寻生命真章 《王阳明传》周月亮 著天津人民出版社2022年出版在阅读的广袤天地里,一位读者遇上一本书之后,能饶有...
为什么有些人特别喜欢表现自己? 为什么有些人特别喜欢表现自己?因为有些人就是有这种表现欲,想把自己展示给大家,得到大家的认可和赞扬感...
冒险岛时间神殿丢失的羽毛笔任务... 冒险岛时间神殿丢失的羽毛笔任务怎么做?在时间神殿各个图里有时候会随机出现一个箱子,点那个箱子会传送到...