龟速幂TLE求调教
查看原帖
龟速幂TLE求调教
705012
Miss_SGT楼主2023/12/26 17:29
#include<bits/stdc++.h>
#define i128 __int128
using namespace std;
template <typename T> inline void read(T &x) {
    x = 0; char ch = getchar();int f=1;
    while (!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();}
    while (isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    x*=f;
}
int T,x,y;
i128 mod;
inline void add(i128 &x,i128 y){x+=y;if(x>=mod)x-=mod;}
inline i128 Mul(i128 x,i128 y){
	i128 ans=0;
	for(;y;y>>=1){
		if(y&1) add(ans,x);
		add(x,x);
	}
	return ans;
}
inline i128 Pw(__int128 x,int y){
	__int128 ans=1;
	for(;y;y>>=1){
		if(y&1) ans=Mul(ans,x);
		x=Mul(x,x);
	}
	return ans;
}
void print(i128 x){
	if(x>9) print(x/10);
	putchar(48+x%10);
}
int main(){
	read(T);
	while(T--){
		read(x),read(y),read(mod);
		print(Pw(x,y));
		putchar('\n');
	}
	return 0;
}

2023/12/26 17:29
加载中...