多学习。

【数论】Acwing1301.C循坏——裴蜀定理(扩展欧几里得)

题解

代码

#include <iostream>
#include <cstdio>

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;
}


int main()
{
    LL a,b,c,k;
    while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k))
    {
        if(a == 0 && b == 0 && c == 0 && k == 0)
            break;
        LL o = 1; //要用LL的1来移位不然下方用(1 << 32) 1默认为int会导致进制丢失
        LL n = (o << k);
        LL x,y;
        LL gcd = exgcd(n,c,x,y);
        if((b-a) % gcd){
            puts("FOREVER");
        }
        else{
            y *= (b-a)/gcd;
            n /= gcd;
            printf("%lld\n",(y % n + n)%n);
        }
    }
    return 0;
}
posted @   czyaaa  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示