高精度取模模板
Posted three-d
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度取模模板相关的知识,希望对你有一定的参考价值。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; #define ll long long int turn[105]; struct node int num[105]; friend bool operator <(node a,node b) if(a.num[0]^b.num[0]) return a.num[0]<b.num[0]; for(register int i=a.num[0];i;--i) if(a.num[i]^b.num[i]) return a.num[i]<b.num[i]; return 1; friend node operator -(node a,node b) int pos; for(register int i=1;i<=a.num[0];++i) if(a.num[i]<b.num[i]) a.num[i]+=10,--a.num[i+1]; a.num[i]-=b.num[i]; while(a.num[0]&&!a.num[ a.num[0] ]) --a.num[0]; return a; friend node operator %(node a,node b) int cnt=a.num[0]-b.num[0]+1; node res; for(register int i=cnt;i;--i) memset(res.num,0,sizeof(res.num)); for(register int j=1;j<=b.num[0];++j) res.num[j+i-1]=b.num[j]; res.num[0]=b.num[0]+i-1; while(res<a) a=a-res; return a; n,m; inline void read(node &n) int num=0; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) ch=getchar(); while(ch>=‘0‘&&ch<=‘9‘) turn[++num]=(ch^48),ch=getchar(); n.num[0]=num; for(register int i=1;i<=num;++i) n.num[i]=turn[num-i+1]; void gcd(node a,node b) //cout<<a.num[0]<<‘ ‘<<b.num[0]<<‘ ‘<<b.num[1]<<"#"<<endl; if(!b.num[0]) if(a.num[0]==1&&a.num[1]==1) cout<<"Yes"<<endl; return; else cout<<"No"<<endl; return ; if(a<b) gcd(a,b%a); else gcd(b,a%b); int main() int t; scanf("%d",&t); while(t--) read(n),read(m); //n=n%m; //for(register int i=n.num[0];i;--i) cout<<n.num[i]; gcd(n,m);