sdut 2605 预处理A^N mod p
来源:互联网 发布:jdbc insert多个数据 编辑:程序博客网 时间:2024/05/16 10:57
http://blog.csdn.net/i_am_a_winer/article/details/44905701
http://blog.csdn.net/i_am_a_winer/article/details/44905701
http://blog.csdn.net/i_am_a_winer/article/details/44905701
http://blog.csdn.net/i_am_a_winer/article/details/44905701
http://blog.csdn.net/i_am_a_winer/article/details/44905701
转载的博客思路,学习学习
设:A^N=A^(k*x+y)。即:N=k*x+y,x=N/k,y=N%k。由于N为10^9,所以,k取33333左右就可以了,这样x和y的取值都不超过33333了。
则快速幂变成了:A^N mod P=A^(k*x+y) mod P=(A^(k*x) * A^y )mod P=(A^(k*x) mod P * (A^y) mod P) mod P。由于A,k,P都是定值,则A^N mod P 的值只取决于x和y。分别用dpx和dpy来记录A^(k*x) mod P和A^y mod P,则又可得到:
A^N=(dpx *dpy)mod P。
下面是该如何求dpx和dpy呢?
显然:A^y mod P=A*A^(y-1) mod P=(A mod P *(A^(y-1)) mod P) mod P。即:dpy=(A mod P * dp(y-1)) mod P。
同样的:A^(k*x) mod P=(A^k mod P * A^(k*(x-1)) mod P) mod P。即:dpx=(A^k mod P *dp(x-1)) mod P。
AC,1196ms 下面是这题榨取出来的模板
const int kk=31623;//sqrt(1000000000)ll dpx[kk];ll dpy[kk];void init(ll A,ll p)//预处理ans=A^NmodP ans=((dpx[N/kk])*(dpy[N%kk]))%p{dpx[0]=dpy[0]=1;dpy[1]=A%p;for(int i=2; i<=kk; i++){dpy[i]=(dpy[1]*dpy[i-1])%p;}dpx[1]=dpy[kk];for(int i=2; i<=kk; i++){dpx[i]=(dpx[1]*dpx[i-1])%p;}}
- sdut 2605 预处理A^N mod p
- SDUT 2605 A^X mod P
- SDUT 2605-A^X mod P(大幂分解求和)
- sdut 2605 A^X mod P (分解优化)
- sduT 2605-A^X mod P(大幂分解求和)
- UPC:2219 A^X mod P(预处理空间换时间)
- 第四届山东省赛 A^X mod P [预处理]【思维】
- N阶乘MOD P
- hdu 3930 X^N=a(mod) p 求X
- A^X mod P
- A^X mod P
- A^X mod P
- N的阶乘 mod P
- 计算 高次幂相对某个模数的余( (a ^ n)mod p, n 很大 )
- UPC2219: A^X mod P
- C:A^X mod P
- 1038 X^A Mod P
- ap = a (mod p)
- Qt5 UDP网络通讯详解
- FastDFS(2)java客户端
- The C Programming Language 练习题2-3
- SQL优化的一些方法
- QT多线程详解
- sdut 2605 预处理A^N mod p
- Docker Hello World
- 重写和重载的区别
- Coursera 吴恩达 Deep Learning 第2课 Improving Deep Neural Networks 第一周 编程作业代码 Gradient Checking
- JQery总结
- ubuntu 安装 chrome
- 使用babel将es6转化成es5
- [算法]算法的乐趣
- 两个集合