POJ - 2115 Looooops(扩展欧几里得)
2018-01-29 17:37
288 查看
求解Cx+pow(2,k)y=(B-A) 是否存在解,如果存在输出最小正整数解x类似于poj1061,直接用扩展欧几里得即可
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long ll;
void gcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if(!b) {d=a;x=1;y=0;}
else
{
gcd(b,a%b,d,y,x);y-=x*(a/b);
}
}
int main()
{
ll A,B,C,K;
while(cin>>A>>B>>C>>K)
{
if(A==0&&B==0&&C==0&&K==0) break;
ll a=C;
ll b=pow(2,K);
ll c=B-A;
//printf("%d %d\n",a,b);
ll ans,x,y;
gcd(a,b,ans,x,y);
if(c%ans==0)
{
x=x*c/ans;
y=y*c/ans;
//printf("%lld*%lld+%lld*%lld=%lld\n",a,x,b,y,c);
ll b1=b/ans;
if(x<0)
{
if(-x%b1==0)
x=0;
else
x=x+(-x/b1+1)*b1;
//printf("x=%lld %lld\n",x,b1);
}
if(x>b1)
{
if(x%b1==0) x=0;
else
x=x-(x/b1*b1);
}
printf("%lld\n",x);
}
else printf("FOREVER\n");
}
return 0;
}
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long ll;
void gcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if(!b) {d=a;x=1;y=0;}
else
{
gcd(b,a%b,d,y,x);y-=x*(a/b);
}
}
int main()
{
ll A,B,C,K;
while(cin>>A>>B>>C>>K)
{
if(A==0&&B==0&&C==0&&K==0) break;
ll a=C;
ll b=pow(2,K);
ll c=B-A;
//printf("%d %d\n",a,b);
ll ans,x,y;
gcd(a,b,ans,x,y);
if(c%ans==0)
{
x=x*c/ans;
y=y*c/ans;
//printf("%lld*%lld+%lld*%lld=%lld\n",a,x,b,y,c);
ll b1=b/ans;
if(x<0)
{
if(-x%b1==0)
x=0;
else
x=x+(-x/b1+1)*b1;
//printf("x=%lld %lld\n",x,b1);
}
if(x>b1)
{
if(x%b1==0) x=0;
else
x=x-(x/b1*b1);
}
printf("%lld\n",x);
}
else printf("FOREVER\n");
}
return 0;
}
相关文章推荐
- 【POJ - 2115 】 Looooops 【扩展欧几里得 求不定方程】
- POJ 2115 Looooops (扩展欧几里得+调整解)
- POJ 2115 扩展欧几里得
- POJ 2115 C Looooops(扩展欧几里得)
- POJ 2115 不穿衣服的扩展欧几里得
- POJ - 2115 - C Looooops (扩展欧几里得)
- POJ 2115 C Looooops扩展欧几里得
- POJ C Looooops 2115 (扩展欧几里得)
- POJ 2115 C Looooops(扩展欧几里得)
- POJ-----2115---C Looooops扩展欧几里得
- poj1061 青蛙的约会 && poj 2115 C Looooops<扩展欧几里得>
- POJ 2115 C Looooops(扩展欧几里得应用)
- poj 2115 C Looooops(推公式+扩展欧几里得模板)
- POJ 2115 C Looooops(扩展欧几里得)
- POJ - 2115 C Looooops (扩展欧几里得)
- 扩展欧几里得(poj 2115 poj 1061)
- POJ 2115 C Looooops 解模线性方程(扩展欧几里得)
- POJ 2115 C Looooops 扩展欧几里得
- POJ 2115 C Looooops(扩展欧几里得应用)
- POJ 2115 C Looooops [扩展欧几里得]【数论】[水]