欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

搞定C语言算法中的数论基础:模板快速幂的实现方法

最编程 2024-01-25 07:18:01
...

题目描述

给你三个整数 a , b , p a,b,p a,b,p,求 a b   m o d   p a^b \bmod p abmodp

输入格式

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

输出格式

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

样例 #1

样例输入 #1

2 10 9

样例输出 #1

2^10 mod 9=7

提示

样例解释

2 10 = 1024 2^{10} = 1024 210=1024 1024   m o d   9 = 7 1024 \bmod 9 = 7 1024mod9=7

数据规模与约定

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

代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	long long a, b, p, ans,x , y;
	scanf("%lld %lld %lld", &a, &b, &p);
	x = a;
	y = b;
	ans = 1;
	x = x % p;
	
	while (y > 0)
	{
		if ((y % 2) == 1)
		{
			ans = (ans * x) % p;
		}
		y = y / 2;
		x = (x * x) % p;
	}
	printf("%lld^%lld mod %lld=%lld", a, b, p, ans);
	
	return 0;
}