luogu1226:快速幂(模板题)
2018-02-03 22:00
134 查看
题目传送门
这是一个二分思维的板子,将高次的幂运算,用二分的方法降低时间复杂度,最终变成O(logN);
题目大意:
求 a 的 x 次方,答案 mod p。
(其中 x 的数值一般都超级大,孩子用循环暴力枚举必然超时的那种!)
思路分析:
1、举个栗子:
(3)^17 => ((3)^16)*3;
(3)^16 => (3*3)^8 => ((3)^2)^8 ;
如果以上两行的内容你能看懂 恭喜你~~已经明白了快速幂的核心思路。
上代码(没错,我要讲的已经结束,不懂的请看代码):
#include<cstdio>
#define ll long long
ll s=1,t;
int a,x,k,p;
int main()
{
scanf("%d %d %d",&a,&x,&p);
k=x;t=a;//因为后面要输出 a、x的值,所以用 k、t替代
while(k>0)//快速幂的核心是对幂进行二分
{
if(k%2>0) //s存答案:当k为奇数时,帮忙存落单的t
{ s*=t; s%=p; } //当k为 1的时候,t内的缓存会全部给 s
t*=t; t%=p;
k/=2;
}
printf("%d^%d mod %d=%d",a,x,p,s);
return 0;
}
sdf
求 a 的 x 次方,答案 mod p。
(其中 x 的数值一般都超级大,孩子用循环暴力枚举必然超时的那种!)
这是一个二分思维的板子,将高次的幂运算,用二分的方法降低时间复杂度,最终变成O(logN);
题目大意:
求 a 的 x 次方,答案 mod p。
(其中 x 的数值一般都超级大,孩子用循环暴力枚举必然超时的那种!)
思路分析:
1、举个栗子:
(3)^17 => ((3)^16)*3;
(3)^16 => (3*3)^8 => ((3)^2)^8 ;
如果以上两行的内容你能看懂 恭喜你~~已经明白了快速幂的核心思路。
上代码(没错,我要讲的已经结束,不懂的请看代码):
#include<cstdio>
#define ll long long
ll s=1,t;
int a,x,k,p;
int main()
{
scanf("%d %d %d",&a,&x,&p);
k=x;t=a;//因为后面要输出 a、x的值,所以用 k、t替代
while(k>0)//快速幂的核心是对幂进行二分
{
if(k%2>0) //s存答案:当k为奇数时,帮忙存落单的t
{ s*=t; s%=p; } //当k为 1的时候,t内的缓存会全部给 s
t*=t; t%=p;
k/=2;
}
printf("%d^%d mod %d=%d",a,x,p,s);
return 0;
}
sdf
求 a 的 x 次方,答案 mod p。
(其中 x 的数值一般都超级大,孩子用循环暴力枚举必然超时的那种!)
相关文章推荐
- 快速幂取模运算模板
- WeiPHP插件模板中快速引入公共模板文件
- 矩阵快速幂模板
- 高效程序猿之(一)VS2010快速生成代码模板(转)
- 矩阵快速幂模板
- dreamweaver利用预设模板来快速的架构一个简易网站
- 一般线性筛法求素数与快速线性筛法求素数模板
- hdu1575 Tr A(矩阵快速幂模板题)
- 矩阵快速幂模板
- Expression Blend实例中文教程(13) - 控件模板快速入门ControlTemplates 推荐
- 矩阵快速幂模板
- PHP快速推送微信模板消息
- C语言快速排序模板大全(qsort函数)
- wordpress快速开发之分类多模板解决
- 使用GitHub pages + Hexo 快速搭建个性化博客(一)-部署Hexo默认blog模板至远程GitHub
- 洛谷 P1177 【模板】快速排序
- 模板计算机快速部署操作windows2003操作系统
- 快速扩展ArcServer(ADF for DOT NET )自带模板
- 模板--快速幂及矩阵快速幂