poj2115

来源:互联网 发布:mysql数据表关联字段 编辑:程序博客网 时间:2024/06/10 05:02

链接:点击打开链接

题意:解c*xb-a mod(2^k)的输出最小正解

代码:

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;void exgcd(long long a,long long b,long long &d,long long &x,long long &y){    if(b==0)    x=1,y=0,d=a;    else{        exgcd(b,a%b,d,y,x);        y-=x*(a/b);    }}                                               //扩展欧几里得模板int main(){    long long a,b,c,d,k,x,y,tmp,ans;    while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k)!=EOF){        if(!(a||b||c||k))        break;        tmp=c;        c=b-a;        a=tmp;        b=(long long)1<<k;        exgcd(a,b,d,x,y);        if(c%d!=0)        puts("FOREVER");                                else{            ans=x*c/d;            tmp=b/d;                            //tmp为x的最小间距            printf("%I64d\n",(ans%tmp+tmp)%tmp);        }    }    return 0;}


 

0 0
原创粉丝点击