数学问题之(快速幂)

简介: 数学问题之(快速幂)

P1226 【模板】快速幂||取余运算

题目描述

给你三个整数 a,b,p,求 a^b mod p。

输入格式

输入只有一行三个整数,分别代表 a,b,p。

输出格式

输出一行一个字符串 a^b mod p=s,其中 a,b,p 分别为题目给定的值, s 为运算结果。

输入输出样例

输入 #1

2 10 9

输出 #1

2^10 mod 9=7

说明/提示

样例解释

2^10 =1024,1024 mod 9=7。

数据规模与约定

对于 100% 的数据,保证 0≤a,b<2^31 ,a+b>0,2≤p<2^31。

解析:

=a*a*…*a,暴力的计算需要O(n)的时间。

快速幂使用二进制拆分倍增思想,仅需要O(logn)的时间。

对n做二进制拆分,例如,,对a做平方倍增,例如,

n有logn+1个二进制位,我知道了后,只需要计算logn+1次乘法就可以了。

例如:

quickpow(3,13)

1:(1101)&1=1,res=1*3=3;a=3*3=3^2; n=(110);

2:(110)&1=0; a=3^2*3^2=3^4; n=(11);

3:(11)&1=1,res=3*3^4; a=3^4*3^4=3^8; n=(1);

4:(1)&1=1,res=3*3^4*3^8; a=3^8*3^8=3^16; n=(0);

快速幂可以应用在任何具有结合律的运算中,例如,取模运算、矩阵乘法等。

例如:

(3^13)%p=((3^8)%p*(3^4)%p*(3^1)%p)%p

1. //示例代码  C++
2. #include <iostream>
3. using namespace std;
4. int a,b,p;
5. int quickpow(long long a,int b,int p){
6.  int res=1;
7.  while(b){
8.    if(b&1) res=res*a%p;
9.    a=a*a%p;
10.     b>>=1;
11.   }
12.   return res;
13. }
14. int main()
15. { 
16.   cin>>a>>b>>p;
17.   cout<<a<<'^'<<b<<" mod "<<p<<'='<<quickpow(a,b,p)<<endl;
18.   return 0;
19. }
1. # 示例代码  Python语言
2. def tobinary(x):
3.     t=[]
4. while(x):
5.         t.append(x%2)
6.         x//=2
7. return t
8. 
9. def quickpow(a,b,p):
10.     n=tobinary(b)
11.     res=1
12. for i in n:
13. if i:
14.             res=res*a%p
15.         a=a*a%p
16. return res
17. 
18. a,b,p=[int(i) for i in input().split()]
19. print("%d^%d mod %d=%d"%(a,b,p,quickpow(a,b,p)))
1. # 其实Python有更简单的写法:在Python中pow()函数本身就可以实现快速幂取模
2. # a,b,p = map(int,input().split())
3. a,b,p=[int(i) for i in input().split()]
4. print("%d^%d mod %d=%d"%(a,b,p,pow(a,b,p)))


相关文章
|
机器学习/深度学习 人工智能
数学问题之(矩阵快速幂)
数学问题之(矩阵快速幂)
数学问题之(矩阵加速递推快速幂)
数学问题之(矩阵加速递推快速幂)
数学知识-约数
数学知识-约数
|
机器学习/深度学习 人工智能
数学知识-质数
数学知识-质数
|
算法
数学知识:快速幂
复习acwing算法基础课的内容,本篇为讲解数学知识:快速幂,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
91 0
数学知识:快速幂
|
算法 C++
数学知识:约数(一)
复习acwing算法基础课的内容,本篇为讲解数学知识:约数,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
133 0
数学知识:约数(一)
数学知识:约数(二)
AcWing 871. 约数之和
92 0
数学知识:约数(二)
|
算法
数学知识:质数(一)
复习acwing算法基础课的内容,本篇为讲解数学知识:质数,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
152 0
数学知识:质数(一)