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;
}

全部评论

相关推荐

05-07 19:10
已编辑
中国科学技术大学 C++
silly01:现在先去 momenta,8-9月去鹅找日常实习,八股文算法背好了你这随便进。不过建议补充一下后端知识,MySQL、Redis看下八股,再补个6824,加点go后台的技术栈,9月随便进大厂。CPP后端只能来WXG
点赞 评论 收藏
分享
但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务