菜鸟学快速幂算法
来源:互联网 发布:绝知的意思 编辑:程序博客网 时间:2024/04/29 12:57
由一道题引出主题:
题目描述:
计算A的B次幂对C取模(A^BmodC)并且1<=A,B,C<=32768.
输入三个整数A,B,C,输入文件每一行依次三个整数a,b,c用空格隔开
每行输出一个运算结果
代码:
#include<iostream>
using namespace std;
int pow(int a,int b,int c)
{
if(b==0)
return 1;
else
if(b==1)
return a%c;
else
if(b%2)
return (a*pow(a,b/2,c)*pow(a,b/2,c))%c;
else
return (pow(a,b/2,c)*pow(a,b/2,c))%c;
}
main()
{
int a,b,c;
while(cin>>a>>b>>c)
{
cout<<pow(a,b,c)<<endl;
}
}
算法思想:
二分的思想,比如a的8次方等于a的四次方的平方,等于a的二次方的平方的平方。而a的7次方等于a*a的三次方的平方,等于a*(a*a的一次方的平方)的平方。所以要对b的奇偶性讨论,抛开这题来说,快速幂的算法代码如下:
#include<iostream>
using namespace std;
int pow(int a,int b)
{
if(b==0)
return 1;
else
if(b==1)
return a;
else
if(b%2)
return a*pow(a,b/2)*pow(a,b/2);
else
return pow(a,b/2)*pow(a,b/2);
}
使用快速幂可以大大减小时间复杂度,其时间复杂度为O(log2n)。而朴素算法为O(n)。
- 菜鸟学快速幂算法
- 菜鸟学算法之--快速排序
- 菜鸟学java,练习写的快速排序算法
- <菜鸟学算法-A排序(分治的思想:快速排序)>
- 菜鸟学排序算法
- 菜鸟学排序----快速排序
- 菜鸟学python-快速入门
- 菜鸟学排序:快速排序
- 菜鸟学算法-----堆排序
- 菜鸟学算法:输入输出文件的海量数据(快速排序,数组排序)
- 华为编程大赛-菜鸟学算法
- <菜鸟学算法-A排序(插入排序)>
- <菜鸟学算法-A排序(冒泡排序)>
- <菜鸟学算法-A排序(计数排序)>
- <菜鸟学算法-A排序(shell排序)>
- <菜鸟学算法-A排序(选择排序)>
- <菜鸟学算法-Dijkstra求最短路径>
- 菜鸟学算法之POJ1636 Prison Rearrangement
- UML时序图总结
- VS2010添加默认路径,库以及Lib
- 每日一题(26) - 数组元素重排
- 页面中转json
- 黑马程序员-JAVA 高新技术(反射)
- 菜鸟学快速幂算法
- Jquery13_遮盖层
- 估算的应用与Little定律
- 黑马程序员—IO流2
- 设计模式之开篇
- 过滤器
- 某大型银行深化系统之十五:数据架构
- 小项目:智能教学录播系统
- 关于cc2430上的tinyos的一个例子的问题