zoukankan      html  css  js  c++  java
  • POJ 2115 C Looooops (扩展欧几里德解同余方程 Ax = B(mod C) )

    题目链接http://poj.org/problem?id=2115 题目大意:C语言循环语句,初试i赋值A,每次加C,并且模2^k,当i == B时终止,问终止循环次数,或者无法终止. 思路: 思路比较简单的一道题,解方程CX + A = B (mod 2^k)即可,变形一下:CX = B - A (mod 2^k)  
    #include 
    #include 
    using namespace std;
    long long gcd(long long a, long long b){
        return b ? gcd(b, a%b) : a;
    }
    void ext_gcd(long long a, long long b, long long &x, long long &y){
        if (b == 0){
            x = 1;
            y = 0;
            return ;
        }
        ext_gcd(b, a%b, x, y);
        long long tmp = x;
        x = y;
        y = tmp - a / b * y;
        return ;
    }
    bool equalation(long long a, long long b, long long c, long long &x, long long &y){
        long long g = gcd(a, b);
        if (c % g != 0){
            return false;
        }
        a /= g;
        b /= g;
        c /= g;
        ext_gcd(a, b, x, y);
        x *= c;
        long long tmp = abs(double(b));
        x = (x % tmp + tmp) % tmp;
        return true;
    }
    int main(){
        long long a, b, c, k, m;
        while(cin >> a >> b >> c >> k){
            if (a + b + c + k == 0){
                return 0;
            }
            m = 1LL << k;
            long long x, y;
            if (equalation(c, m, b-a, x, y)){
                cout << x << endl;
            }
            else{
                cout << "FOREVERn";
            }
        }
        return 0;
    }
    
     
    举杯独醉,饮罢飞雪,茫然又一年岁。 ------AbandonZHANG
  • 相关阅读:
    050819no JLINK device found
    050819流水账
    C语言附录的一些小摘要
    020819存疑点&error&warning
    020819流水账
    010819流水账
    310719存疑点&error&warning
    310719流水账
    300719流水账
    linux内核获取当前进程路径分析
  • 原文地址:https://www.cnblogs.com/AbandonZHANG/p/4114195.html
Copyright © 2011-2022 走看看