zoukankan      html  css  js  c++  java
  • hdu2669Romantic (扩展欧几里德)

    Problem Description
    The Sky is Sprite.
    The Birds is Fly in the Sky.
    The Wind is Wonderful.
    Blew Throw the Trees
    Trees are Shaking, Leaves are Falling.
    Lovers Walk passing, and so are You. 
    ................................Write in English class by yifenfei

     

    Girls are clever and bright. In HDU every girl like math. Every girl like to solve math problem!
    Now tell you two nonnegative integer a and b. Find the nonnegative integer X and integer Y to satisfy X*a + Y*b = 1. If no such answer print "sorry" instead.
     

    Input
    The input contains multiple test cases.
    Each case two nonnegative integer a,b (0<a, b<=2^31)
     

    Output
    output nonnegative integer X and integer Y, if there are more answers than the X smaller one will be choosed. If no answer put "sorry" instead. 
     

    Sample Input
    77 51 10 44 34 79
     

    Sample Output
    2 -3 sorry 7 -3

    题意:给你两个数a,b,让你找到一个非负的整数x和一个整数y,使得ax+by=1,如果有多种情况,x要取最小的。ps:图还是挺好看的(笑)

    思路:这是普通的欧几里德模板题,其中要使得x最小,那么先把特解x0求出来,那么最小的x就是(x0%b+b)%b.

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<string>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    typedef long double ldb;
    #define inf 99999999
    #define pi acos(-1.0)
    ll extend_gcd(ll a,ll b,ll &x,ll &y){
        if(b==0){
            x=1;y=0;return a;
        }
        ll d=extend_gcd(b,a%b,y,x);
        y-=a/b*x;
        return d;
    }
    ll niyuan(ll a,ll n){
        ll x,y;
        ll d=extend_gcd(a,n,x,y);
        if(d==1) return (x%n+n)%n;
        else return -1;
    }
    ll gcd(ll a,ll b){
        return b ? gcd(b,a%b) : a;
    }
    
    int main()
    {
        ll n,m,b,d,a,x,y;
        while(scanf("%lld%lld",&a,&b)!=EOF)
        {
            if(gcd(a,b)!=1){
                printf("sorry
    ");continue;
            }
            d=extend_gcd(a,b,x,y);
            ll x1;
            x1=(x%b+b)%b;
            ll t=(x1-x)/b;
            printf("%lld %lld
    ",x1,y-a*t);
        }
        return 0;
    }
    


  • 相关阅读:
    同一子网建立ssh通道,映射到本地
    机器学习线性模型-自定义各个模块阶段
    MATLAB中图像处理的函数
    基于鱼皮肤的鱼个体识别(1)
    防骗指南-东南亚绑架,诈骗,菠菜
    防骗指南-识别传销
    防骗指南-套路贷以及肉偿
    防骗指南-套路贷如何识别
    Opencv 特征提取与检测-Haar特征
    1. QCamera2基础组件——cam_semaphore
  • 原文地址:https://www.cnblogs.com/herumw/p/9464539.html
Copyright © 2011-2022 走看看