《P1082 [NOIP 2012 提高组] 同余方程》

题目描述

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

输入格式

一行,包含两个整数 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。

代码实现:

复制代码
#include <bits/stdc++.h>
using namespace std;

#define ll long long

ll pow(ll a, ll b, ll p) {
    ll base = a, res = 1;
    while (b > 0) {
        if (b & 1) {
            res *= base;
            res %= p;
        }
        base *= base;
        base %= p;
        b >>= 1;
    }
    return res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int a, mod;
    cin >> a >> mod;
    ll t = 1, tmp = mod, cnt = 0;
    while (!(tmp & 1)) {
        cnt++;
        tmp >>= 1;
    }
    t *= pow(2, cnt - 1, mod);
    for (int i = 3; i * i <= tmp; i += 2) {
        cnt = 0;
        while (tmp % i == 0) {
            cnt++;
            tmp /= i;
        }
        if (cnt > 0) {
            t = t * (i - 1) % mod * pow(i, cnt - 1, mod) % mod;
        }
    }
    if (tmp != 1) t *= (tmp - 1);
    cout << pow(a, t - 1, mod) % mod << endl;
    return 0;
}
相关推荐
吃好睡好便好13 小时前
用while循环语句求和
开发语言·学习·算法·matlab·信息可视化
热心网友俣先生13 小时前
2026 电工杯数学建模 A 题参考答案
数学建模
王璐WL13 小时前
【C语言入门级教学】函数的概念2
c语言·数据结构·算法
不知名的忻14 小时前
B 树与 B+ 树:面试完全指南
b树·算法·面试·b+树
运筹vivo@15 小时前
2657. 找到两个数组的前缀公共数组 | 难度:中等
算法·leetcode·职场和发展·哈希表
索木木15 小时前
NCCL SHARP 和 TREE算法
java·服务器·算法
心中有国也有家16 小时前
hccl 架构拆解:昇腾集合通信库到底在做什么?
人工智能·经验分享·笔记·分布式·算法·架构
小O的算法实验室17 小时前
2026年MCS,Q-learning增强MOPSO与改进DWA融合算法+复杂三维地形下特定移动机器人动态路径规划
算法
Peter·Pan爱编程17 小时前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
故事和你9119 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论