QuickPower快速幂

#include <iostream>
#include <cstdio>
using namespace std;
int a,b;
long long qp(int a,int b)
{
    int t=1;int y=a;
    while (b)
    {
        if (b&1) t=t*y;//whether obb or not
        y=y*y;
        b=b>>1;
        //cout << a << " " << b << " " << t << " " << y << endl;
    }
    return(t);
}
int main()
{
    scanf("%d %d",&a,&b);
    printf("%lld",qp(a,b));
}
时间: 2024-10-09 04:03:17

QuickPower快速幂的相关文章

HDU 2256 Problem of Precision 数论矩阵快速幂

题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5+2√6)n+(5-2√6)n是一个整数(2√6的偶数次幂总会正负抵消掉),并且(5-2√6)n是小于1的.所以我们就只需要求出Sn-1即可.令 An=(5+2√6)n;  Bn=(5-2√6)n. Sn=An+Bn     Sn为整数. Sn*((5+2√6)+(5-2√6))=Sn*10 Sn*

POJ 3233 Matrix Power Series 矩阵快速幂+二分求和

矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+Ak/2+A(k/2)*(A+A2+...+Ak/2)    k为偶数时: sum=A+A2+...+A(k-1)/2+A((k-1)/2)*(A+A2+...+A(k-1)/2)+Ak    k为奇数时. 然后递归二分求和 PS:刚开始mat定义的是__int64,于是贡献了n次TLE... #i

算法学习笔记 递归之 快速幂、斐波那契矩阵加速

递归的定义 原文地址为:http://blog.csdn.net/thisinnocence 递归和迭代是编程中最为常用的基本技巧,而且递归常常比迭代更为简洁和强大.它的定义就是:直接或间接调用自身.经典问题有:幂运算.阶乘.组合数.斐波那契数列.汉诺塔等.其算法思想: 原问题可分解子问题(必要条件): 原与分解后的子问题相似(递归方程): 分解次数有限(子问题有穷): 最终问题可直接解决(递归边界): 对于递归的应用与优化,直接递归时要预估时空复杂度,以免出现用时过长或者栈溢出.优化递归就是以

矩阵快速幂计算hdu1575

矩阵快速幂计算和整数快速幂计算相同.在计算A^7时,7的二进制为111,从而A^7=A^(1+2+4)=A*A^2*A^4.而A^2可以由A*A得到,A^4可以由A^2*A^2得到.计算两个n阶方阵的乘积复杂度为O(n^3).k的二进制大约有logk位,总的复杂度为O(n^3*logk). #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<queue> #include<iomanip> #incl

快速幂--斐波那契数列

1)编写程序,求解a^b.其中b是正整数. 方法1. //一般求幂算法,O(r) public static long power1(int a,int r){ if(r<0) { System.out.println("r must be positive number!"); return -1; } if(r==0){ return 1; } long res=1; for(int i=1;i<=r;++i){ res*=a; } return res; } 这种使用

ACM学习历程—SNNUOJ 1110 A Simple Problem(递推 &amp;&amp; 逆元 &amp;&amp; 组合数学 &amp;&amp; 快速幂)(2015陕西省大学生程序设计竞赛K题)

Description Assuming a finite – radius “ball” which is on an N dimension is cut with a “knife” of N-1 dimension. How many pieces will the “ball” be cut into most?However, it’s impossible to understand the following statement without any explanation.L

快速幂——一种对复杂题目的二进制处理-

快速幂代码: int QuickPower(int N,int time)//计算N^time { int ReturnValue=1;//记录返回值 int Pow=1;//记录当前已经计算出的多少次幂 int temp=N;//记录N^i次幂 while(time){ int Bin=time%(2*Pow);//Bin记录二进制位 if(Bin) {time-=Bin; Bin=1;}//这里是将time化成二进制的灵活用法 ReturnValue*=(temp*Bin?temp*Bin:

模板 快速幂|取余

前置知识 (1)如果将 aa 自乘一次,就会变成 a^2a2 .再把 a^2a2 自乘一次就会变成 a^4a4 .然后是 a^8a8…… 自乘 nn 次的结果是 a^{2^{n}}a2n .对吧…… (2)a^xa^y = a^{x+y}axay=ax+y,这个容易. (3)将 bb 转化为二进制观看一下: 比如 b = (11)_{10}b=(11)10? 就是 (1011)_{2}(1011)2? .从左到右,这些 11 分别代表十进制的 8,2,18,2,1.可以说 a^{11} = a^

矩阵快速幂刷题系列

来源自http://blog.csdn.net/chenguolinblog/article/details/10309423 hdu 1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5587    Accepted Submission(s): 4200 Problem Description A为一个方阵,则Tr