zoukankan      html  css  js  c++  java
  • hdu 2669 Romantic(线性同余,扩展欧几里得)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2669

    题目大意:找出一组x,y使ax+by=1,如果找不出则输出“sorry”。

    解题思路:有两个点需要注意,一个点:由定理可得,如果a,b不互质即__gcd(a,b)大于1就不满足上式,这时我们就需要输出“sorry”。
    另一个点,(刚开始第二个点不懂,有些大佬的博客就放个代码,我否了)需要满足x>=0,(还不知道为什么),一组解(x,y)可以写成(x+kb,y-ka)的形式,要满足x>=0,只需要将x一直加b,y一直减去a直到x>=0。

    Code:

    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    int exgcd(int a,int b,int &x,int &y){//扩展欧几里得算法模板 
    	if(b==0){
    		x=1;y=0;
    		return a;
    	}
    	int r = exgcd(b,a%b,x,y);
    	int t = y;
    	y=x-(a/b)*y;
    	x=t;
    	return r;
    }
    
    int main(){
    	int a,b,x,y;
    	while(cin>>a>>b){
    		if(__gcd(a,b)>1){//如果a,b的最大公约数大于1,就不满足条件 
    			cout<<"sorry
    ";
    			continue;
    		}
    		int r = exgcd(a,b,x,y);
    		while(x<0){//加到x>=0为止 
    			x+=b;
    			y-=a;
    		}
    		cout<<x<<" "<<y<<endl;
    	}
    	
    	
    	return 0;
    }```
    
    
    七月在野,八月在宇,九月在户,十月蟋蟀入我床下
  • 相关阅读:
    sql注入常用的判断方法
    refere是什么
    mysql语句
    linux命令
    软件测试
    tcp和udp
    java面试干货
    为什么重写了equals方法一般也要重写hashCode方法
    redis源码解析
    Numpy复习
  • 原文地址:https://www.cnblogs.com/voids5/p/12695023.html
Copyright © 2011-2022 走看看