简单的快速幂算法
来源:互联网 发布:知乎 最美av神作 编辑:程序博客网 时间:2024/05/17 09:39
简单的快速幂算法在数据比较大时能够防止数据溢出,并且减少运算时间,也是初学者比较容易掌握的一种算法
但是,我上网搜了一些后发现有的算法模板存在漏洞,先贴出来让大家看一下
int PowerMod(int a, int b, int c){ int ans = 1; a = a % c; while(b>0) { if(b % 2 = = 1) ans = (ans * a) % c; b = b/2; a = (a * a) % c; } return ans;}
大家可以 令a=2 ,b=0 ,c=1代入进去跑一下,就会发现 return ans=1 而实际上的答案应该是0
这个算法逻辑上是没错的,应对大数的时候很好用,但是a=2 ,b=0 ,c=1 这种很简单的情况却会WA了
这里主要是 while(b>0) 和 先将ans定义为1两个条件使得 上述情况发生了错误,因此,我们只需对这种情况进行一下补充就好了
代码如下:
#include<stdio.h>#include<iostream>using namespace std;int main(){int a,b,c;int ans=1;while(scanf("%d %d %d",&a,&b,&c)!=EOF){//int ans = 1;if(b>0){a=a%c;int h;h=b;while(h>0){if(h%2==1)ans=(ans*a)%c;h=h/2;a=(a*a)%c;}//if(b==0 && c==1)//cout<<"0"<<endl;cout<<ans<<endl;}else if(b==0 && c==1)cout<<"0"<<endl;else if(b==0 && c!=1)cout<<"1"<<endl; }return 0;}
其实这个算法好像还有问题(但我实在没找到.......)
那个题 reduge 后AC了 .....
阅读全文
0 0
- 简单的快速幂算法
- 简单快速的算法
- 简单实用的单片机CRC快速算法
- java快速排序算法的简单实现
- 快速选择算法的一个简单实现
- 简单的排序算法:快速排序
- Java快速排序的简单算法
- 一个简单的js快速排序算法
- 简单的快速幂
- 快速幂的简单解释
- 快速幂算法的理解
- 神奇的快速幂算法!!
- 快速幂logn的算法
- 快速幂的算法理解
- 简单快速理解算法--快速排序
- 一种简单、快速、高效的多边形减面算法
- 一种简单、快速、高效的多边形减面算法
- 快速求出淘汰赛中轮空场次-最简单的算法
- Spring Cloud (1) | java.net.UnknownHostException: eureka-server
- Effective Java读书笔记-考虑实现Comparable接口
- Android开发TCP连接
- 独家=新书《倾心倾情倾了所有》免费阅读全文[已完结]
- 字符编码
- 简单的快速幂算法
- jacob调用ocx控件出错
- mac 使用PHP开发环境
- 文件操作基本流程
- 一些Linux命令简要笔记——磁盘管理
- Ubuntu16.04中将python3设置为默认
- c语言实现链表面试题
- Telnet服务
- Innovative Cooperation