• 洛谷P1082 同余方程 [2012NOIP提高组D2T1] [2017年6月计划 数论06]


    P1082 同余方程

    题目描述

    求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。

    输入输出格式

    输入格式:

    输入只有一行,包含两个正整数 a, b,用一个空格隔开。

    输出格式:

    输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。

    输入输出样例

    输入样例#1:
    3 10
    输出样例#1:
    7

    说明

    【数据范围】

    对于 40%的数据,2 ≤b≤ 1,000;

    对于 60%的数据,2 ≤b≤ 50,000,000;

    对于 100%的数据,2 ≤a, b≤ 2,000,000,000。

    NOIP 2012 提高组 第二天 第一题

    ax≡1(%b)  等价于 ax + by = 1

    因为ax % b = 1 % b = 1

    即ax = -yb + 1(别忘了y取正负都可以)

    裸扩展欧几里得

    算出来可能x为负数,只需要多加b然后%b即可

    即答案为:((x % b) + b) % b

     1 #include <bits/stdc++.h>
     2 const int INF = 0x3f3f3f3f;
     3 inline void read(int &x)
     4 {
     5     x = 0;char ch = getchar();char c = ch;
     6     while(ch < '0' || ch > '9')c = ch, ch = getchar();
     7     while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0',ch = getchar();
     8     if(c == '-')x = -x;
     9 }
    10 void exgcd(int a,int b,int &x,int &y)
    11 {
    12     if(!b){x = 1;y = 0;}
    13     else 
    14     {
    15         exgcd(b, a%b, y, x);
    16         y -= a/b * x;
    17     }
    18 }
    19 
    20 int a,b;
    21 
    22 int main()
    23 {
    24     read(a);read(b);
    25     int x = 0,y = 0;
    26     exgcd(a, b, x, y);
    27     printf("%d", ((x%b) + b)%b);
    28     return 0;
    29 }
  • 相关阅读:
    python-获取网页源码及保存网页图片到本地实例
    python-随机向文件中写入100个名字实例
    python-计算文件中每个字出现的次数
    python-序列类型
    python-字符串
    python示例1(基本知识巩固)
    python-示例(基本知识巩固)
    [leetcode] Binary Tree Upside Down
    Trie 树
    第K大问题
  • 原文地址:https://www.cnblogs.com/huibixiaoxing/p/6985587.html
Copyright © 2020-2023  润新知