zoukankan      html  css  js  c++  java
  • 扩展欧几里得求解同余方程(poj 1061)

    设方程 ax + by = c , 若 gcd(a,b) 是 c的因子(记作gcd(a,b)|c)则方程有解,反之无解。

    其中x0,y0是方程的一组特解 , d = gcd(a,b),

    poj1061模型转化为(n-m)* t + L * k  = x - y  ,其中t和k是未知参数,形同ax+by = c 的形式,用extgcd即可求出x的一个特解,再通过这个特解找到x的最小正整数解就可以了。

    AC代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define ll long long int 
    ll extgcd(ll a,ll b,ll& X,ll& Y){
    	ll d = a;
    	if(!b){
    		X = 1;
    		Y = 0;
    	} 
    	else{
    		d = extgcd(b,a%b,Y,X);
    		Y -=a/b*X;
    	}
    	return d;
    }
    int main(){
    	ll x,y,m,n,l,X,Y;
    	while(~scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l)){
    		ll D = extgcd(n-m,l,X,Y);
    		if((x-y)%D != 0){
    			printf("Impossible
    ");
    			continue;
    		}
    		ll t = (x-y)/D;
    		X*= t;
    		l = l/D;
    		printf("%lld
    ",((X%l+l)%l));
    		
    	}
    	return 0;
    }
  • 相关阅读:
    没有一个计时器控制在VB6计时器功能
    检测系统范围内的鼠标事件
    c# Com
    tcpdump
    dd
    dumpe/dumpe2fs/e2fsck
    fdisk
    mkswap/swapon/swapoff/free
    mkfs/mk2fs/fsck/e2fsck/tune2fs/blkid
    parted
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12129640.html
Copyright © 2011-2022 走看看