0
点赞
收藏
分享

微信扫一扫

A - A^B Mod C

kmoon_b426 2022-01-16 阅读 105

给出3个正整数A B C,求A^B Mod C。

例如,3 5 8,3^5 Mod 8 = 3。

Input

3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9)

Output

输出计算结果

Sample Input

3 5 8

Sample Output

3

mod好像就是取模运算3mod5=3;

本题的数据大总体乘出来会溢出,所以用到快速幂的方法,它基于数学上的的运算公式:

(a*b)MOD c=[(a mod c)*( b mod c)]mod c.非常神奇。

#include<stdio.h>
#include<math.h>
long long fastPower(long long base,long long power,long long dai){
	long long result=1;
	while(power>0){
		if(power%2==1){
			result=result*base%dai;//把奇数提出来直接取模最后power==1时result*进去
		}
		power/=2;//奇数与偶数/2都为偶数。
		base=base*base%dai;
	}
	return result;
}
int main()
{
	long long  a,b,c;
	scanf("%lld %lld %lld",&a,&b,&c);
	long long ans=fastPower(a,b,c);
	printf("%lld",ans);
	return 0;
}

 看一位大神的代码用的位运算。太厉害我不做解释了

long long fastPower(long long base,long long power,long long dai){
	long long result=1;
	while(power>0){
		if(power&1){//这是在二进制上运行的5:101,1:001,&后为1。4:100,1 :001 &后为0;
			result=result*base%dai;
		}
		power >>=1;//等同于power/=2;
		base=base*base%dai;
	}
	return result;
}
举报

相关推荐

0 条评论