二分搜索——求K的N次方
2017-07-01 16:32
134 查看
如果更快的求一个整数k的n次方。如果两个整数相乘并得到结果的时间复杂度为O(1),得到整数k的N次方的过程请实现时间复杂度为O(logN)的方法。
给定k和n,请返回k的n次方,为了防止溢出,请返回结果Mod 1000000007的值。
测试样例:
2,3
返回:8
比如求10^75:
思路:
将N转化成二进制形式,先求出10^1,根据两个10^1可以求出10^2,再根据两个10^2可以求出10^4,依次……;如果对应二进制的位置为1,则累乘。
public class KPowN {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getValue(2,3));
System.out.println(getValue(10,75));
}
public static int getValue(int K, int N){
if(K==0)
return 0;
if(N==0)
return 1;
if(N==1)
return K;
long temp=K;
long res=1;
long f=1000000007;
for(;N>0;N>>=1){
if((N&am
4000
p;1)!=0)
res*=temp;
res%=f;
temp=(temp*temp)%f;
}
return (int)res;
}
}
给定k和n,请返回k的n次方,为了防止溢出,请返回结果Mod 1000000007的值。
测试样例:
2,3
返回:8
比如求10^75:
思路:
将N转化成二进制形式,先求出10^1,根据两个10^1可以求出10^2,再根据两个10^2可以求出10^4,依次……;如果对应二进制的位置为1,则累乘。
public class KPowN {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getValue(2,3));
System.out.println(getValue(10,75));
}
public static int getValue(int K, int N){
if(K==0)
return 0;
if(N==0)
return 1;
if(N==1)
return K;
long temp=K;
long res=1;
long f=1000000007;
for(;N>0;N>>=1){
if((N&am
4000
p;1)!=0)
res*=temp;
res%=f;
temp=(temp*temp)%f;
}
return (int)res;
}
}
相关文章推荐
- 二分查找、二叉搜索
- hdu2446--二分搜索+打表
- poj 2976(01分数规划搜索+二分答案)
- 二分搜索1-
- leetcode 二分搜索树
- HDU 4803 Poor Warehouse Keeper 贪心 二分搜索
- 二分搜索(2)
- 二分搜索大法
- 2144 砝码称重 2 用map离散化hasi+二分搜索
- 牛客网算法学习记录-二分搜索
- poj1727 排序+二分搜索
- poj3273 二分搜索
- 二分搜索(2)
- 二分搜索
- codeforces 785 C. Anton and Fairy Tale (数学 二分搜索)
- 【原创】编程之美之二分搜索
- 【leetcode】34Search for a Range(二分搜索上下界)
- poj 3897 Maze Stretching 二分+A*搜索
- 《挑战程序设计竞赛》3.1.5 二分搜索-其它 POJ1759 3484
- Monthly Expense--CSU-ACM2017暑假集训2-二分搜索