zoukankan      html  css  js  c++  java
  • 【pku2115-C Looooops】拓展欧几里得-不定方程

    http://poj.org/problem?id=2115

    题解:一个变量从A开始加到B,每次加C并mod2^k,问加多少次。转化为不定方程:C*x+2^K*Y=B-A

    //poj2115
    
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    using namespace std;
    
    typedef long long LL;
    LL bit[40];
    LL tx,ty;
    
    LL exgcd(LL a,LL b)
    {
        if(b==0) {tx=1,ty=0;return a;}
        LL d=exgcd(b,a%b);
        LL x=ty,y=tx-(a/b)*ty;
        tx=x;ty=y;
        return d;
    }
    
    int main()
    {
        //freopen("a.in","r",stdin);
        //freopen("a.out","w",stdout);
        bit[0]=1;
        for(LL i=1;i<=32;i++) bit[i]=bit[i-1]*2;
        LL a,b,c,k;
        while(1)
        {
            scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k);
            if(!a && !b && !c && !k) return 0;
            LL A=c,B=bit[k],C=b-a;
            LL g=exgcd(A,B);
            if(C%g) printf("FOREVER
    ");
            else 
            {
                LL x=tx*(C/g);
                x=(x%(B/g)+(B/g))%(B/g);
                printf("%I64d
    ",x);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    NXOpen 创建方体block代码
    Mysql---2 DDL DML DQL DCL
    Mysql数据库--1数据库操作
    FFmpeg
    Servlet Web
    Java web Springboot
    Java 网络
    Java 注解 反射
    Java 线程状态
    Java Lambda
  • 原文地址:https://www.cnblogs.com/KonjakJuruo/p/5178503.html
Copyright © 2011-2022 走看看