https://www.cometoj.com/contest/84/problem/A?problem_id=4299
思路:
C
R
T
CRT
CRT模板题啊,唯一要注意的就是题目要求答案是个正整数,因此如果
C
R
T
CRT
CRT计算出的结果是
0
0
0的话要输出
23
∗
233
∗
2333
23*233*2333
23∗233∗2333。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int n;
ll a[10],m[10];
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
ll c=exgcd(b,a%b,x,y);
ll t=x;
x=y;
y=t-a/b*y;
return c;
}
ll inv(ll a,ll p)// 求 a%p 的乘法逆元
{
ll x,y;
exgcd(a,p,x,y);
return (x%p+p)%p;
}
ll RCT()
{
ll ans=0,M=1;
for(int i=1;i<=n;i++)
M*=m[i];
for(int i=1;i<=n;i++)
{
ll tmp=M/m[i];
ans=(ans+a[i]*tmp%M*inv(tmp,m[i])%M)%M;
}
return (ans+M)%M;
}
int main()
{
n=3;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
m[1]=23,m[2]=233,m[3]=2333;
ll ans=RCT();
if(!ans)
ans=m[1]*m[2]*m[3];
printf("%lld\n",ans);
return 0;
}