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;
    }```
    
    
    七月在野,八月在宇,九月在户,十月蟋蟀入我床下
  • 相关阅读:
    21 viewPager--- hzScrollView ----llContainer
    21 ViewPager RadioGroup
    CLEAR REFRESH FEEE的区别
    在ALV中更新数据库表
    cl_gui_cfw=>flush
    cl_gui_cfw=>dispatch
    数据库表-DD01L DD02L DD03L-保存数据表和域的消息
    SAP 锁机制
    ABAP 搜索帮助
    SAP Basis常用事务代码
  • 原文地址:https://www.cnblogs.com/voids5/p/12695023.html
Copyright © 2011-2022 走看看