题解 | #C Looooops#

C Looooops

https://ac.nowcoder.com/acm/contest/980/J

C Looooops

思路

k 位存储系统,意思是能储存的最大数为 2^k-1,越过了会变为 0

所以 A + x*C 图片说明 B(mod 2^k)
利用扩欧求得 x 即可

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll exgcd(ll a,ll b,ll &x,ll &y){
    if(!b){
        x=1,y=0;
        return a;
    }

    ll d=exgcd(b,a%b,y,x);
    y-=a/b*x;

    return d;
}

ll get_mod(ll a,ll b){
    return (a%b+b)%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,b=(ll)1<<k,c=B-A;

        ll x=0,y=0;
        ll d=exgcd(a,b,x,y);

        if(c%d) puts("FOREVER");
        else{
            x*=c/d;
            x=get_mod(x,b/d);
            cout<<x<<endl;
        }
    }

    return 0;
}
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务