POJ 2115 C Looooops 扩展gcd
2016-08-01 14:25
363 查看
很裸的扩展gcd 3月份做过一次 不过那时候稀里糊涂不求甚解 最近又好好看了下扩展gcd 这就一sb题
ACcode:
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
ll ex_gcd(ll a,ll b,ll &x,ll &y){
if(a==0&&b==0)return -1;
if(b==0){x=1,y=0;return a;}
ll d=ex_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main(){
ll a,b,c,k,A,B,C,D,X,Y;
while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k)&&(a+b+c+k)){
A=c;
B=1ll<<k;
C=b-a;
D=ex_gcd(A,B,X,Y);
if(C%D!=0)puts("FOREVER");
else {
X=X*(C/D);
X=(X%(B/D)+B/D)%(B/D);
cout<<X<<'\12';
}
}
return 0;
}
ACcode:
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
ll ex_gcd(ll a,ll b,ll &x,ll &y){
if(a==0&&b==0)return -1;
if(b==0){x=1,y=0;return a;}
ll d=ex_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main(){
ll a,b,c,k,A,B,C,D,X,Y;
while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k)&&(a+b+c+k)){
A=c;
B=1ll<<k;
C=b-a;
D=ex_gcd(A,B,X,Y);
if(C%D!=0)puts("FOREVER");
else {
X=X*(C/D);
X=(X%(B/D)+B/D)%(B/D);
cout<<X<<'\12';
}
}
return 0;
}
相关文章推荐
- poj 2115 C Looooops(扩展gcd)
- POJ 2115 C Looooops 扩展gcd的应用 及其 gcd exgcd的讲解
- POJ-2115 C Looooops 扩展GCD
- POJ C Looooops 2115 (扩展欧几里得)
- POJ2115——C Looooops(扩展欧几里德+求解模线性方程)
- POJ 2115- C Looooops(扩展欧几里德)
- POJ 2115 C Looooops(扩展欧几里德)
- C Looooops POJ - 2115 扩展欧几里得
- POJ 2115 C Looooops(扩展欧几里得应用)
- poj 2115 C Looooops 【扩展欧几里得】
- poj_2115 C Looooops(模线性方程+扩展欧几里得)
- poj 2115 C Looooops(推公式+扩展欧几里得模板)
- poj-2115-C Looooops-扩展欧几里德
- POJ 2115 C Looooops扩展欧几里得
- 【模线性方程 && 扩展欧几里德】POJ - 2115 C Looooops
- poj 2115 C Looooops(扩展欧几里得)
- [poj 2115] C Looooops 扩展欧几里得
- poj-2115-C Looooops-扩展欧几里德
- poj 2115 C Looooops (扩展欧几里得)
- POJ 2115 C Looooops (扩展欧几里德解同余方程 Ax = B(mod C) )