poj 2115 扩展欧几里德
2013-07-25 20:03
260 查看
#include<stdio.h>
#include<string.h>
#define max 32
typedef long long LL;
LL pow2[max+5];
void init(){
for(int i=1;i<=max;i++){
pow2[i]=1LL<<i;
}
}
LL a,b,c,k;
void gcd(LL a,LL b,LL& d,LL& x,LL& y){
if(!b){
d=a; x=1; y=0; return;
}
gcd(b,a%b,d,y,x); y-=(a/b)*x;
}
int main(){
init();
while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)&&a+b+c+k!=0){
LL d,x,y;
if(a==b){
puts("0"); continue;
}
gcd(c,pow2[k],d,x,y);
if((b-a)%d){
puts("FOREVER");
}
else{
x=x*(b-a)/d;
x=(x%(pow2[k]/d)+(pow2[k]/d))%(pow2[k]/d);
printf("%lld\n",x);
}
}
}
#include<string.h>
#define max 32
typedef long long LL;
LL pow2[max+5];
void init(){
for(int i=1;i<=max;i++){
pow2[i]=1LL<<i;
}
}
LL a,b,c,k;
void gcd(LL a,LL b,LL& d,LL& x,LL& y){
if(!b){
d=a; x=1; y=0; return;
}
gcd(b,a%b,d,y,x); y-=(a/b)*x;
}
int main(){
init();
while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)&&a+b+c+k!=0){
LL d,x,y;
if(a==b){
puts("0"); continue;
}
gcd(c,pow2[k],d,x,y);
if((b-a)%d){
puts("FOREVER");
}
else{
x=x*(b-a)/d;
x=(x%(pow2[k]/d)+(pow2[k]/d))%(pow2[k]/d);
printf("%lld\n",x);
}
}
}
相关文章推荐
- POJ - 2115 S - C Looooops 扩展欧几里德
- poj2115 Looooops 扩展欧几里德的应用
- POJ 2115 C Looooops(扩展欧几里德 + 求解模线性方程)
- 【POJ 2115】 C Looooops (扩展欧几里德)
- POJ 2115- C Looooops(扩展欧几里德)
- POJ 2115 C Looooops(扩展欧几里德)
- POJ2115——C Looooops(扩展欧几里德+求解模线性方程)
- POJ 2115 Looooops 扩展欧几里德 Java
- poj 2115 C Looooops (扩展欧几里德)
- poj-2115-C Looooops-扩展欧几里德
- POJ 2115 C Looooops (扩展欧几里德解同余方程 Ax = B(mod C) )
- POJ 2115-C Looooops(扩展欧几里德)
- POJ_2115_扩展欧几里德
- POJ 2115 C Looooops (扩展欧几里德解同余方程 Ax = B(mod C) )
- POJ 2115 C Looooops(扩展欧几里德)
- poj 2115 C Looooops(扩展欧几里德)
- POJ - 2115 C Looooops(扩展欧几里德求解模线性方程(线性同余方程))
- C Looooops POJ - 2115(扩展欧几里德 + 解同余方程)
- poj-2115-C Looooops-扩展欧几里德
- poj-2115-C Looooops-扩展欧几里德