整数的快速幂
//递归写法
int fastpow(int a,int p)
{
if(p==0)
return 1;
if(p%2==1)
{
int temp=fastpow(a,(p-1)/2);
return temp*temp*a;
}else{
int temp=fastpow(a,p/2);
return temp*temp;
}
}
//非递归写法
int fastpow(int a,int p)
{
int ret=1;
while(p>0)
{
if(p%2==1)
ret=ret*a;
a=a*a;
p>>=1;
}
return ret;
}
能在
O(log n)的时间内通过,当数很大时,必要的时候要进行取模运算,因为某个因子取余之后相乘再取余保持余数不变,那么新算得的数也可以进行取余,所以得到比较良好的改进版本,例,
int ans = 1;
a = a % c; //加上这一句
for(int i = 1;i<=b;i++)
{
ans = ans * a;
}
ans = ans % c;
简单的整数快速幂的题
http://poj.org/problem?id=1995
http://acm.hdu.edu.cn/showproblem.php?pid=2035
HDU2035代码
import java.util.Scanner;
public class Main
{
Scanner scan=new Scanner(System.in);
int m=1000;
public static void main(String[] args)
{
new Main().run();
}
void run(){
while(true)
{
int a=scan.nextInt();
int b=scan.nextInt();
if(a==0&&b==0)
break;
else{
fastpow(a,b);
}
}
}
void fastpow(int a,int b){
long c=1;
while(b>0)
{
if(b%2==1)
c=(c*a)%m;
a=(a%m)*(a%m);
b>>=1;
}
System.out.println(c);
}
}
分享到:
相关推荐
判断某整数是否为2的整数次幂 问题转化为:判断整数是否为正整数且二进制中仅存在一位1 (n > 0 && (n & (n - 1)) == 0) 链表节点交换 修改next指针的值进行节点的交换 修改val字段的值 等价节点交换 练习: leetcode...
【标题】"POJ3006-Dirichlet's Theorem on Arithmetic Progressions"是北京大学在线编程平台POJ上的一道题目,该题目主要基于数论中的狄利克雷定理(Dirichlet's Theorem on Arithmetic Progressions)。狄利克雷...
5. **递归与分治**:快速幂、大整数乘法、Fibonacci数列等。 6. **贪心算法**:背包问题、活动安排等。 7. **回溯与剪枝**:八皇后问题、N皇后问题、迷宫求解等。 8. **模拟**:模拟实际操作,如时间计算、物理...
哈希算法是一种在计算上非常高效的数据结构和算法,它能够快速地查找、插入和删除数据,通过将数据映射到一个固定大小的桶或槽中实现。在给定的题目中,哈希算法被应用于解决多种问题,包括字符串子串计数、字符串...
**4.2 poj 3061, poj 2566, hdu 5358, 洛谷 p1102等题目** 这些在线编程竞赛题目都是尺取法的实际应用场景。它们可能涉及到数组、链表的操作,要求求解特定条件下的子序列、区间和、最大/最小值等问题。解决这些...
例如,在 POJ 2891 题中,我们求解最小正整数解,可以先求出每个单独方程的解,然后根据解的关系计算出最终解。如果无法找到满足条件的解,则输出 `-1` 表示无解。 此外,对于一定范围内解的个数,如 HDU 1573 题目...
- **POJ**: <http://poj.org/> - **SDUT**: - **URAL**: - **SPOJ**: - **Codeforces**: 这些网站为算法学习者提供了丰富的练习资源。 ### 二、算法书籍推荐 #### 《算法导论(原书第3版)》 - **作者**: ...
- **原理**:对于任意正整数`i`,`lowbit(i) = i & (-i)`,这里利用了负数的二进制补码表示。 2. **更新操作**:假设我们要对位置`i`上的值增加一个值`val`,则更新操作如下: ```plaintext while (i ) { c1[i]...
对于每对输入的整数a和b,输出它们的和。 **样例输入** ``` 1 5 ``` **样例输出** ``` 6 ``` ##### C语言示例代码 ```c #include int main() { int a, b; while (scanf("%d %d", &a, &b) != EOF) { printf(...
2.18.1 HDU4656 卷积取模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.19 其它公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.19.1 Polya . . . ....