1 条题解
-
1kk118294191 LV 8 @ 2017-09-09 17:16:29
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<queue>
#include<deque>
using namespace std;
typedef long long ll;
const int maxn=3;
ll s=1,Mi,ans,m[maxn],a[maxn];
inline ll read() {
char c=getchar();
ll x=0,f=1;
while(c<'0'||c>'9') {
if(c=='-')
f=-1;
c=getchar();
}
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return x*f;
}
inline void exgcd(ll a,ll b,ll &x,ll &y) {
if(b==0) {
x=1,y=0;
return;
} else {
exgcd(b,a%b,y,x);
y-=(a/b)*x;
}
}
inline ll qmod(ll a,ll b,ll modd) {
ll cnt=0;
while(b) {
if(b&1) cnt=(cnt+a)%modd;
a=a*2%modd;
b>>=1;
}
return cnt;
}
int main() {
//freopen("crt.in","r",stdin);
//freopen("crt.out","w",stdout);
for(int i=1; i<=2; i++)
m[i]=read(),a[i]=read(),s*=m[i];
for(int i=1; i<=2; i++) {
ll x,y;
Mi=s/m[i];
exgcd(Mi,m[i],x,y);
x=(x%m[i]+m[i])%m[i];
ll mul=Mi*x;
ans=(ans%s+qmod(mul,a[i],s))%s;
}
if(ans<0) ans+=s;
cout<<ans<<endl;
return 0;
}
- 1
信息
- 难度
- 9
- 分类
- (无)
- 标签
- 递交数
- 6
- 已通过
- 3
- 通过率
- 50%
- 上传者