题目大意

给定整数 \(A,X,M\),求 \(\sum\limits^{X-1}_{i=0} A^i\) 对 \(M\) 取模的值。

数据范围:\(1 \le A,M \le 10^9\),\(1 \le X \le 10^{12}\)。


题目分析

直接算显然会 T 飞,所以尝试把这个式子弄成一些比较好求的玩意儿。

手玩一下样例。例如 \(A=8,X=10\) 时,答案就为 \(\sum\limits^{10-1}_{i=0} 8^i=8^0+8^1+\cdots+8^9=(8^0+8^5)(8^0+8^1+8^2+8^3+8^4)=(8^0+8^4)(8^0+8^1+8^2+8^3)+8^8+8^9=\cdots\)。也就是说,我们可以把整个式子分解成关于 \(A\) 的两个多项式的乘积加上若干个 \(A\) 的幂次方的形式,求出这两个多项式的值乘起来并加上剩下几个 \(A^i\) 即可。

但是这样似乎还不能完全解决问题,要是这两个多项式的长度太长或者剩余的 \(A^i\) 太多,照样 T,考虑控制两个多项式的长度和 \(A^i\) 的数量。

于是我们就可以想到一个叫根号的东西。

可以把式子拆成如下形式:\(\sum\limits^{X-1}_{i=0} A^i=(A^{0\times[\sqrt{X}]}+A^{1\times[\sqrt{X}]}+\cdots+A^{([\sqrt{X}]-1)\times[\sqrt{X}]})(A^0+A^1+\cdots+A^{[\sqrt{X}]-1})+A^{[\sqrt{X}]\times[\sqrt{X}]}+A^{[\sqrt{X}]\times[\sqrt{X}]+1}+\cdots+A^X\),比如 \(A=8,X=10\) 时,答案就可表示成 \([(8^0+8^3+8^6)(8^0+8^1+8^2)+8^9]\)。这样,两个多项式的长度和剩余 \(A^i\) 的数量最多也不会超过 \([\sqrt{X}]\),而 \(X\le 10^{12}\),理论上能过。

但理论上能过并不代表它不会 T。如果用了一些常数比较大的写法的话这个做法依然是过不去的。比如按下面代码里的写法,快速幂使用递归时会 T 掉几个点,而换成循环快速幂就能 1500ms 卡过,不要问我怎么知道的。

(其实出题人完全可以把 \(X\) 开成 \(10^{18}\),把这个解法彻底卡掉,但良心出题人似乎特意把这种做法放过去了?)


代码

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
ll a,x,MOD,len,ans,sum,sum1;
ll qpow(ll x,ll y) {
ll mul=1;
while (y) {
if (y&1) mul=mul*x%MOD;
x=x*x%MOD,y>>=1;
}
return mul;
}
int main() {
scanf("%lld%lld%lld",&a,&x,&MOD),a%=MOD;
len=sqrt(x);
for (ll i=0;i<len;i++)
sum=(sum+qpow(a,i))%MOD,sum1=(sum1+qpow(a,i*len))%MOD;
for (ll i=len*len;i<x;i++) ans=(ans+qpow(a,i))%MOD;
printf("%lld",(ans+sum*sum1%MOD)%MOD);
return 0;
}

【题解】ABC293E Sol的更多相关文章

  1. [Sgu395][bzoj2363]Binary Cat Club

    一道神题…… rzO 发现立杰在初三(http://hi.baidu.com/wjbzbmr/item/4a50c7d8a8114911d78ed0a9据此可以推断)就怒A了此题…… Orz /*** ...

  2. POJ - 题解sol[暂停更新]

    初期:一.基本算法: (1)枚举. (poj1753,poj2965) poj1753 话说我用高斯消元过了这题... poj2965 巧了,用高斯消元01矩阵更快(l o l). (2)贪心(poj ...

  3. [bzoj\lydsy\大视野在线测评]题解(持续更新)

    目录: 一.DP 二.图论 1.最短路 2.强连通分量 三.利用单调性维护 四.贪心 五.数据结构 1.并查集 六.数学 1.计数问题 2.数学分析 七.博弈 八.搜索 /////////////// ...

  4. Codeforces Round #466 (Div. 2) 题解

    人生中第三次\(CF\)... 考试中切了\(A\)~\(E\) \(F\)题会做没时间写 题解 A:Points on the line 题意 给定一个数列,删最小的数,使最大差不大于一个定值 So ...

  5. C#版 - Leetcode 593. 有效的正方形 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  6. C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  7. CF449 (Div. 1简单题解)

    A .Jzzhu and Chocolate pro:现在给定一个大小为N*M的巧克力,让你横着或者竖着切K刀,都是切的整数大小,而且不能切在相同的地方,求最大化其中最小的块. (N,M,K<1 ...

  8. CF446 (Div. 1)简单题解

    A .DZY Loves Sequences pro:给定长度为N的序列,你最多可以改变一个数的值,问最长严格上升子序列长度. N<1e5. sol:分几种情况,一种的不改变: 一种是改变,然后 ...

  9. HGOI20181029模拟题解

    HGOI20181029模拟题解 /* sxn让我一定要谴责一下出题人和他的数据! */ problem: 给出十进制数a,b,然后令(R)10=(a)10*(b)10,给出c表示一个k进制数(1&l ...

  10. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解

    喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...

随机推荐

  1. PyInstaller打包的文件闪退

    问题描述:使用PyInstaller打包的pycharm写的python程序,打包好后从windows上打开一直闪退 一.双击exe文件闪退,从cmd命令行中与加载程序,可以看到具体的报错 D:\di ...

  2. Java与Mysql锁相关知识总结

    锁的定义 在计算机程序中锁用于独占资源,获取到锁才可以操作对应的资源. 锁的实现 锁在计算机底层的实现,依赖于CPU提供的CAS指令(compare and swsp),对于一个内存地址,会比较原值以 ...

  3. 33-webpack详细配置output

    const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') module. ...

  4. 机器学习04-(决策树、集合算法:AdaBoost模型、BBDT、随机森林、分类模型:逻辑回归)

    机器学习04 机器学习-04 集合算法 AdaBoost模型(正向激励) 特征重要性 GBDT 自助聚合 随机森林 分类模型 什么问题属于分类问题? 逻辑回归 代码总结 波士顿房屋价格数据分析与房价预 ...

  5. 2022-12-18:给定一个长度为n的二维数组graph,代表一张图, graph[i] = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向的, 一共有n个人,编号0~n-1, 讨

    2022-12-18:给定一个长度为n的二维数组graph,代表一张图, graph[i] = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向的, 一共有n个人,编号0~n-1, 讨 ...

  6. Python忽略NoData计算多张遥感影像的像元平均值:whitebox库

      本文介绍基于Python中whitebox模块,对大量长时间序列栅格遥感影像的每一个像元进行忽略NoData值的多时序平均值求取.   在文章Python ArcPy批量计算多时相遥感影像的各像元 ...

  7. < Python全景系列-2 > Python数据类型大盘点

    <Python全景系列-2> Python数据类型大盘点 欢迎来到我们的系列博客<Python全景系列>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高 ...

  8. url函数

    url() 函数看起来的格式象:url(r^/account/$', views.index, name=index),它可以接收四个参数,分别是两个必选参数:regex.view 和两个可选参数:k ...

  9. ESLint: Expected a space before ‘/&gt;‘, but not found. (vue/html-closing-bracket-spacing)

    文件->设置->编辑器->代码样式->HTML->其他-->在空的标签(打钩)

  10. 一个.Net Core开发的开源动态壁纸软件

    推荐一个Github上Start超过10.8K的超火.好用.强大的.内置很多优美的动态壁纸软件. 项目简介 这是基于.Net Core+WPF开发的.开源的动态壁纸软件,壁纸设置支持任何文件形式,包括 ...