題解 SP26368 【PWRANDMOD - Power and Mod】
阿新 • • 發佈:2020-08-29
實際發表時間:2020-04-16
https://www.luogu.com.cn/problem/SP26368
不想用龜速乘的看這裡來!!!
前兩篇題解用的都是__int128
,但是相乘時又會爆__int128
,又不想用龜速乘,怎麼辦呢?
我們注意到,資料範圍都是正整數,所以我們可以使用無符號的__int128
——__uint128_t
!
然後讀入使用快讀
,輸出用快寫
,冪運算用快速冪
即可
但是NOIP不能用...5555
程式碼:
#include<bits/stdc++.h> #define int __uint128_t //原來忘記用了 using namespace std; inline int read() //快讀 { int s=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch)) { s=(s<<3)+(s<<1)+ch-48; ch=getchar(); } return s; } inline void write(int x) //快寫 { if(x<0)putchar('-'),x=-x; if(x>9)write(x/10); putchar(x%10^48); } inline int qp(int x,int y,int mod) //快速冪 { int res=1; while(y) { if(y&1)res=res*x%mod; y>>=1; x=x*x%mod; } return res; } unsigned a,b,t; //unsigned運算好像比signed運算快 int m; signed main() { t=read(); //讀入t while(t--) { //操作 a=read(),b=read(),m=read();//讀入a,b,m write(qp(a,b,m)),puts(""); //輸出 } return 0; }