因为一个很神奇的题目让我学了__int128和快读
Posted KaaaterinaX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了因为一个很神奇的题目让我学了__int128和快读相关的知识,希望对你有一定的参考价值。
华华教月月做数学
原题链接
这个题目读完,觉得就是写个快速幂模版题,就这?(真的就这吗?)
然后写了快速幂模版,发现连样例都过不去。。
哦这数据,爆long long了啊。。然后我就去看题解了。。。
这个题可以用一个神奇的类型:__int128
就是一个可以装128个二进制位的类型,大概范围是long long的平方。
然后这个类型无法用cin/cout或者scanf/printf读入输出,那我得学学快读了qaq
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
//#include <unordered_set>
#include <string.h>
#include <map>
//#include <unordered_map>
#include <stdlib.h>
#include <time.h>
#include <vector>
#include <deque>
#define YES "YES"
#define NO "NO"
#define INF 0x3f3f3f3f
#define FAST ios::sync_with_stdio(false)
#define ll long long
#define pb push_back
#define endl '\\n'
#define eps const double eps=1e-6
using namespace std;
//---------------------------------------------------//
template<typename T>inline void read(T &x){
x=0;
char c=getchar();
ll f=1;
if(c>'9'||c<'0'){
if(c=='-'){
f=-1;
}
c=getchar();
}
while(c<='9'&&c>='0'){
x=x*10+c-'0';
c=getchar();
}
x*=f;
}
template<typename T> inline void write(T x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9){
write(x/10);
}
putchar(x%10+'0');
}
//_____________________________________________________//
__int128 my_pow(__int128 a,__int128 b,__int128 mod){
__int128 res=1;
while(b){
if(b&1){
res=(res*a)%mod;
}
b>>=1;
a=(a*a)%mod;
}
return res;
}
int main(){
int t;
read(t);
while(t--){
__int128 a,b,p;
read(a);
read(b);
read(p);
write(my_pow(a,b,p));
cout<<endl;
}
}
以上是关于因为一个很神奇的题目让我学了__int128和快读的主要内容,如果未能解决你的问题,请参考以下文章