今天分享下各种快速幂(有点坑),首先说一下快速幂的原理,

以下以求a的b次方来介绍 [1] 
把b转换成二进制数。
该二进制数第i位的权为

 

例如
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算

 

第一种方法(普通的快速幂)   #include<iostream>     //适用范围a,b,p 1e9
#include<cmath>
#include<algorithm>
#include<stack>
#include<map>
using namespace std;
typedef long long ll;ll fastpower(ll a,ll b,ll p)  //写一个快速幂的函数
{ll ans = 1;      while(b)           //b的二进制还有位数{if(b & 1)      //b为奇数  循环{ans = ans * a % p;}a = a * a % p;  // 2^n 增长b >>= 1;        // b右移一位}return ans % p;   //防止b为0,而没有模 p
}int main()
{ll a,b,p;cin>>a>>b>>p;cout<<fastpower(a,b,p)<<endl;return 0;
}第二种方法(第一种的强化版)#include <stdio.h>   //无敌的_int 128 可以无视a,b,p的范围,这范围真的恶心  a,b,p 1e18
typedef __int128 ll;
longlong a_b_Mod_c(ll a, ll b, ll p) {ll s = 1;while (b)    {if (b & 1)s = (s * a) % p;a = (a * a) % p;b >>= 1;}return (longlong) s % p;
}
int main() {int t;longlong a, b, p;scanf("%d", &t);while (t--)    {scanf("%lld%lld%lld", &a, &b, &p);printf("%lld\n", a_b_Mod_c(a, b, p));}return0;
}第三种方法(普通快速幂的优化,即也用了快速乘)#include <iostream>
using namespace std;typedef long long ll;ll q_mul(ll a, ll b, ll mod)   //快乘{ll ans=0;while(b)   {if(b & 1)   ans=(ans+a)%mod;a=(a<<1)%mod;b>>=1;}return ans;
}ll q_pow(ll a, ll b, ll mod)     //快幂{ll ans=1;while(b)    {if(b & 1)   ans=q_mul(ans,a,mod);a=q_mul(a,a,mod);b>>=1;}return ans;
}int main(){ll a,b,mod;int n;cin>>n;while(n--){cin>>a>>b>>mod;cout<<q_pow(a,b,mod)<<endl;  }}Java代码
import java.math.BigInteger;
import java.util.Scanner;public class Main{public static void main(String[] args)     {Scanner sc = new Scanner(System.in);int n = sc.nextInt();for (int i = 0; i < n; i++)        {BigInteger A = sc.nextBigInteger();BigInteger B = sc.nextBigInteger();BigInteger P = sc.nextBigInteger();System.out.println(A.modPow(B, P));}}}最后的大招-python(变态,一般做大数的都用它,别问我为什么,一时用python一时爽,一直用python一直爽,貌似是py的整数类的封装问题)python

1,def fastExpMod(b, e, m):result = 1while e != 0:if (e&1) == 1:# ei = 1, then mulresult = (result * b) % me >>= 1# b, b^2, b^4, b^8, ... , b^(2^n)b = (b*b) % mreturn result
t=int(input())
while t:t-=1a, b, c = map(int, input().split())print(fastExpMod(a,b,c))

2,n = int(input())for i in range(n):a, b, p = map(int, input().split())print(pow(a, b, p))
如果有错误的地方恳请大家指出来。

1≤T≤1031≤T≤103,1≤A,B,P≤1018

转载于:https://www.cnblogs.com/gauss191/p/10503732.html

各种快速幂(qaq)相关推荐

  1. [BZOJ3240][Noi2013]矩阵游戏 快速幂

    当我知道这题矩阵可以用费马小定理搞快速幂的时候 我眼泪都要落下来了QAQ 首先求一发通项F[1][1]->F[2][1]的通项 然后写成A+B的形式 若a != 1 A = (a^(m-1))* ...

  2. acwing 206 石头游戏 矩阵快速幂

    题目地址 构建1维数组f(num(i,j)) -> 表示第num(i,j) =((i-1)*m + j)位的石头有多少个.(i,j)表示一个位置 可以知道f的长度为n*m+1.令f[0] = 1 ...

  3. 矩阵快速幂+构造方法

    与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...

  4. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

  5. 快速幂 + 矩阵快速幂

    快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...

  6. BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1965 题意概括 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取 ...

  7. 牛客网练习赛44-B(快速幂+模拟)

    题目链接:https://ac.nowcoder.com/acm/contest/548/B 题意:计算m/n小数点后k1位到k2位,1≤m≤n≤109,1<=k1<=k2<=109 ...

  8. 【ACM】杭电OJ 4704 Sum (隔板原理+组合数求和公式+费马小定理+快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4704 1.隔板原理 1~N有N个元素,每个元素代表一个1.分成K个数,即在(N-1)个空挡里放置(K-1)块隔板 ...

  9. HDU4549(矩阵快速幂+快速幂)

    f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...

最新文章

  1. 四十六、微信小程序快速开发入门
  2. 链表基本功能:初始化、增、删、查、改
  3. 用Java的Set实现交并差等集合运算
  4. Django单表,连表查询
  5. Ubuntu16.04安装系统之后软件无法安装
  6. 拓端tecdat|R语言有限混合模型聚类FMM、广义线性回归模型GLM混合应用分析威士忌市场和研究专利申请、支出数据
  7. 对称与非对称加密算法总结
  8. 程序员方式原生表白网页
  9. 13级计算机商务沟通与礼仪结课论文,商务沟通论文
  10. FPGA写约束文件+固化+上板抓信号方法(vivado软件)
  11. PVE使用USB蓝牙直通配置
  12. Ubuntu18.04LTS安装TigerVNC
  13. linux格式化只读u盘,linux下FAT32格式u盘只读的问题及解决方法
  14. 移动硬盘无法读取是怎么回事?
  15. 服务器怎么设置自动连接wifi,笔记本无线网络连接IP地址设置(自动获取IP)
  16. MemoryCache缓存
  17. jQuery 操作整理
  18. Python-Cartopy调用自带线上地图作为底图
  19. python编码声明问题
  20. Spring入门详解(一)如何配置一个简单的spring项目

热门文章

  1. 鲍姆-韦尔奇算法 数学推导
  2. 母校/母语/母公司怎么说?
  3. [转载]Java数据库设计中的14个技巧
  4. html5跨域通讯之postMessage的用法
  5. JS获取当前日期及时间
  6. 北京科技大学研究生考试 《工程热力学》(2003年-2011年)
  7. Linux 自动删除N天前的文件
  8. 研发和人力资源发展模式对比研究
  9. .NET项目是否有必要升级到.NET 3.5 + VS 2008
  10. 加入域时遇到“找不到网络路径”错误解决办法汇总