栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

题目描述

给你三个整数 a,b,pa,b,p,求 a^b bmod pabmodp。

输入格式

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

输出格式

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

输入输出样例

输入 #1

2 10 9

输出 #1

2^10 mod 9=7
说明/提示

样例解释

2^{10} = 1024210=1024,1024 bmod 9 = 71024mod9=7。

数据规模与约定

对于 100%100% 的数据,保证 0le a,b < 2^{31}0≤a,b<231,a+b>0a+b>0,2 leq p lt 2^{31}2≤p<231。

模板题,理解不了就把他背下来吧。

#include
using namespace std;
#define ll long long
ll mod(ll a, ll b, ll c) {
	ll sum = 0;
	while (b) {
		if (b & 1)sum = (sum + a) % c;
		a = (a + a) % c;
		b >>=1;
	}
	return sum;
}
ll func(ll a, ll b, ll c) {
	ll ans = 1;
	while (b) {
		if (b & 1)ans = mod(ans, a, c);
		a = mod(a, a, c);
		b >>= 1;
	}
	return ans;
}

int main() {
	ll a, b, c;
	cin >> a >> b >> c;
	cout << a << "^" << b << " mod " << c << "=" << func(a, b, c) << endl;
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号