快速求幂二分算法
2015-09-02 18:20
323 查看
#include<stdio.h> int a,b; void input() { int pow1(); while(scanf("%d%d",&a,&b)==2) { pow1(); } } void pow1() { int r,base; base=a; r=1; while(b!=0) { if(b%2) { r=r*base;//把结果保留到r当中 } base=base*base; b=b/2;//每次进行缩半,对base=base*base这一步起到约束作用 } printf("%d\n",r); } int main() { input(); return 0; }
二分算法
求a^b
二分法:
此处b=b/2;体现二分
base=a;
base=base*base;
可推出a^2,a^4,a^8,a^16..........
所以当b为2^n时
可用如下代码:while(b!=1)
{
base=base*base;
b=b/2;
}
当b不为2^n时
比如b=6;
则按上述代码:
base=a^2; b=2;
base=a^4; b=1
求出结果为a^4,不符,
我们可以观察到a^2和a^4,如果2+4就变成6了,求出结果为a^6
所以只需加个判定条件
我们可以看到a^2时,b=3
所以加个if(b%2)
r=r*base;
同时把while(b!=1)变为while(b)
相关文章推荐
- Android Location服务之Geocoder
- eval解析
- centos创建ftp方法,个人经验
- 收藏基本Java项目开发的书
- 基于HFSS的天线设计流程
- 接口的使用
- Maven assembly打包文件被覆盖问题
- 《git权威指南》第4章git初始化--读书笔记
- HDU 5159 Card(数学期望)
- 代理模式之JDK动态代理
- java 获取时间
- 在HTML中打出人民币符号和对勾符号
- Linux主要shell命令详解
- 反射
- 三分钟理解“抽象工厂模式”——设计模式轻松掌握
- windows64位下系统文件提示找不到
- Python Tkinter Entry和Text的添加与使用
- 三分钟理解“抽象工厂模式”——设计模式轻松掌握
- 在HTML中打出人民币符号和对勾符号
- 缓存与饼干,spring mvc使用ehcache