`
believexkx
  • 浏览: 22467 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

POJ1995&& HDU2035 整数快速幂

阅读更多
整数的快速幂

	//递归写法
		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);
    }
}

分享到:
评论

相关推荐

    leetcode下载-algorithm-1:力扣、HDU、ZOJ、POJ

    判断某整数是否为2的整数次幂 问题转化为:判断整数是否为正整数且二进制中仅存在一位1 (n &gt; 0 && (n & (n - 1)) == 0) 链表节点交换 修改next指针的值进行节点的交换 修改val字段的值 等价节点交换 练习: leetcode...

    POJ3006-Dirichlet's Theorem on Arithmetic Progressions

    【标题】"POJ3006-Dirichlet's Theorem on Arithmetic Progressions"是北京大学在线编程平台POJ上的一道题目,该题目主要基于数论中的狄利克雷定理(Dirichlet's Theorem on Arithmetic Progressions)。狄利克雷...

    hduoj poj 的题目分类

    5. **递归与分治**:快速幂、大整数乘法、Fibonacci数列等。 6. **贪心算法**:背包问题、活动安排等。 7. **回溯与剪枝**:八皇后问题、N皇后问题、迷宫求解等。 8. **模拟**:模拟实际操作,如时间计算、物理...

    Hash相关题解1

    哈希算法是一种在计算上非常高效的数据结构和算法,它能够快速地查找、插入和删除数据,通过将数据映射到一个固定大小的桶或槽中实现。在给定的题目中,哈希算法被应用于解决多种问题,包括字符串子串计数、字符串...

    算法竞赛专题解析--尺取法1

    **4.2 poj 3061, poj 2566, hdu 5358, 洛谷 p1102等题目** 这些在线编程竞赛题目都是尺取法的实际应用场景。它们可能涉及到数组、链表的操作,要求求解特定条件下的子序列、区间和、最大/最小值等问题。解决这些...

    人工智能基础-线性同余方程.pdf

    例如,在 POJ 2891 题中,我们求解最小正整数解,可以先求出每个单独方程的解,然后根据解的关系计算出最终解。如果无法找到满足条件的解,则输出 `-1` 表示无解。 此外,对于一定范围内解的个数,如 HDU 1573 题目...

    这些题目涵盖了递归、排序、数据结构等多个方面,是算法学习和刷题的重要资源

    - **POJ**: &lt;http://poj.org/&gt; - **SDUT**: - **URAL**: - **SPOJ**: - **Codeforces**: 这些网站为算法学习者提供了丰富的练习资源。 ### 二、算法书籍推荐 #### 《算法导论(原书第3版)》 - **作者**: ...

    树状数组(Binary Indexed Tree)

    - **原理**:对于任意正整数`i`,`lowbit(i) = i & (-i)`,这里利用了负数的二进制补码表示。 2. **更新操作**:假设我们要对位置`i`上的值增加一个值`val`,则更新操作如下: ```plaintext while (i ) { c1[i]...

    ACM入门指南ACM入门指南

    对于每对输入的整数a和b,输出它们的和。 **样例输入** ``` 1 5 ``` **样例输出** ``` 6 ``` ##### C语言示例代码 ```c #include int main() { int a, b; while (scanf("%d %d", &a, &b) != EOF) { printf(...

    kuangbin acm模板超级好用

    2.18.1 HDU4656 卷积取模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.19 其它公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.19.1 Polya . . . ....

Global site tag (gtag.js) - Google Analytics