Acwing--快速幂

给定 nn 组 ai,bi,piai,bi,pi,对于每组数据,求出 abiimodpiaibimodpi 的值。

输入格式

第一行包含整数 nn。

接下来 nn 行,每行包含三个整数 ai,bi,piai,bi,pi。

输出格式

对于每组数据,输出一个结果,表示 abiimodpiaibimodpi 的值。

每个结果占一行。

数据范围

1≤n≤1000001≤n≤100000,
1≤ai,bi,pi≤2×1091≤ai,bi,pi≤2×109

输入样例:

2
3 2 5
4 3 9

输出样例:

4
1

 直接for循环求a^n%p时间复杂度是n  ,用快速幂时间复杂度是log(n),就很快!!!

至于为什么要if和>>:

因为转换为二进制形式最右边的数为1的我们要跟新res(结果)

然后每一次都要移位和平方,且注意是long long

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10010;
ll qim(ll a,ll b,ll c)
{
	ll res=1;
	while(b)
	{
		if(b&1)
		res=res*a%c;
		
		b=b>>1;
		a=a*a%c;
	}
	return res;
}

int main()
{
	ios::sync_with_stdio(false);
	int n,m;
	ll a,b,p;
	int t;
	cin>>t;
	while(t--)
	{
		cin>>a>>b>>p;
		cout<<qim(a,b,p)<<endl;//a^b%q
		
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/with_wine/article/details/121297609