zoukankan      html  css  js  c++  java
  • poj2115

    构造出模线性方程c * x = b - a mod (2 ^ k)

    很容易解。

    利用LRJ书上的方法。

    #include <iostream>
    
    using namespace std;
    
    #define LL long long int
    
    LL ext_gcd(LL a, LL b, LL& x, LL& y)
    {
    	LL t, ret;
    	if (!b){
    		x = 1, y = 0;
    		return a;
    	}
    	ret = ext_gcd(b, a%b, x, y);
    	t = x, x = y, y = t - a / b*y;
    	return ret;
    }
    //ax = b (mod n)
    void gcd(LL a, LL b, LL &d, LL &x, LL &y)
    {
    	if (!b)
    	{
    		d = a, x = 1, y = 0;
    	}
    	else
    	{
    		gcd(b, a %b, d, y, x);
    		y -= x * (a / b);
    	}
    }
    LL modular_linear_equation(LL a, LL b, LL n)
    {
    	long long x, y, e, d;
    	gcd(a, n, d, x, y);
    	if (b % d)  return -1;
    	e = b / d * x % n + n;
    	return e % (n / d);
    }
    int main()
    {
    	////c * x = b - a mod (2 ^ k)
    	int a, b, c, k;
    	while (cin >> a >> b >> c >> k && (a || b || c || k))
    	{
    		LL num = modular_linear_equation(c, b - a, 1LL << k);
    		if (num == -1)
    		{
    			cout << "FOREVER" << endl;
    			continue;
    		}
    		cout << num << endl;
    	}
    }


  • 相关阅读:
    linux下base命令
    lldpd-0.7.7代码解读(send_pdu部分)
    openwrt 包makefile
    字符
    AC_CONFIG_HEADER
    大小端
    查看使用了那种shell
    debia下安装libjpeg
    工作流模式 (zhuan)
    1.2.1 工作流管理系统参考模型 (zhuan)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3249114.html
Copyright © 2011-2022 走看看