a^b%p

a^b

https://ac.nowcoder.com/acm/contest/996/A?&headNav=acm

题目描述
求 a 的 b 次方对 p 取模的值,其中 0 <= a,b,p <= 10^9​0;
输入描述:
三个用空格隔开的整数a,b和p。
输出描述:
一个整数,表示a^b mod p
解题思路:a^b%p,因为 0 <= a,b <= 10^9​0,若直接算出a^b,数据会溢出,运用快速幂,a^b相当于b个a的乘积,可以把b每次分成两份,a^b=(a^2^(b/2),先用左移运算符求出b是奇数还是偶数,如果b是奇数,从b中分出来一个a,把b变成奇数,ans*=a;如果b是偶数,ans不变,每次运算后将a翻倍并%p,b/2,直到b==0.
代码实现:

include<bits/stdc++.h>

using namespace std;
int main()
{
long long a, b, p,ans=1;
cin >> a >> b >> p;
while (b)
{
if (b&1) //判断b是否为奇数
ans = ans * a%p;
b >>= 1; //b减半
a = a * a % p; //使a翻倍
}
cout << ans%p;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务