a^b(快速幂)

简介: 题目:求 a 的 b 次方对 p 取模的值。输入格式:三个整数 a,b,p ,在同一行用空格隔开。输出格式:输出一个整数,表示a^b mod p的值。

题目:

求 a 的 b 次方对 p 取模的值。

输入格式:

三个整数 a,b,p ,在同一行用空格隔开。

输出格式:

输出一个整数,表示a^b mod p的值。

数据范围:

0≤a,b≤109

1≤p≤109

输入样例:

3 2 7

输出样例:

2

这道题看似很简单,用函数就可以做出来,但是当数据很大的时候,容易爆long long,所以这道题用到了快速幂的经典算法:

include

using namespace std;

int main(void)

{

long long a,b,p;

cin>>a>>b>>p;

int ras=1%p;

while(b)

{

if(b&1) ras=ras*1ll*a%p;
a=a*1ll*a%p;
b>>=1;

}

cout<<ras<<endl;

return 0;

}

分析,我其实也不懂为啥这样,但是记住模板就可以了(emo)!

目录
相关文章
|
5天前
学习使用按位异或 ^
【6月更文挑战第22天】学习使用按位异或 ^。
9 1
|
1月前
2^x modn=1
2^x modn=1
17 0
|
1月前
|
人工智能 Java BI
快速幂讲解
快速幂讲解
29 0
|
11月前
快速幂问题
快速幂问题
|
11月前
|
物联网
快速幂
快速幂
63 0
|
算法 C++
HDU-1061,Rightmost Digit(快速幂)
HDU-1061,Rightmost Digit(快速幂)
(1+2+...+100)+(1^2+2^2+...+50^2)+(1/1+1/2+...+1/10)
(1+2+...+100)+(1^2+2^2+...+50^2)+(1/1+1/2+...+1/10)