zoukankan      html  css  js  c++  java
  • 51nod 1256 扩展欧几里得

    给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
    Input
    输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)
    Output
    输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
    Input示例
    2 3
    Output示例
    2

    K*M%N=1就相同与K*M = N*Y+1,也可以相当于K*M+N*Y=1,所以K = (x+n)%n;
    使用extgcd要保证gcd(a,b) = 1
     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 
     5 int extgcd(int a, int b, int &x, int &y){
     6     int d = a;
     7     if(b != 0){
     8         d = extgcd(b,a%b,y,x);
     9         y -= (a/b)*x;
    10     }else{
    11         x = 1; y = 0;
    12     }
    13     return d;
    14 }
    15 int mod(int a, int m){
    16     int x, y;
    17     extgcd(a,m,x,y);
    18     // cout << x << ' ' << y << endl;
    19     return (m+x)%m;
    20 }
    21 int main(){
    22     int n, m;
    23     scanf("%d%d",&m,&n);
    24     printf("%d
    ",mod(m,n));
    25     return 0;
    26 }
  • 相关阅读:
    HDU 1060 Leftmost Digit
    HDU 1008 Elevator
    HDU 1042 N!
    HDU 1040 As Easy As A+B
    HDU 1007 Quoit Design
    欧拉函数
    HDU 4983 Goffi and GCD
    HDU 2588 GCD
    HDU 3501 Calculation 2
    HDU 4981 Goffi and Median
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7222898.html
Copyright © 2011-2022 走看看