《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;
}
相关推荐
无限进步_16 分钟前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬33 分钟前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
cwplh35 分钟前
DP 优化二:斜率优化 DP
算法·动态规划
Hcoco_me1 小时前
大模型面试题90:half2,float4这种优化 与 pack优化的底层原理是什么?
人工智能·算法·机器学习·langchain·vllm
浅念-1 小时前
链表经典面试题目
c语言·数据结构·经验分享·笔记·学习·算法
Python算法实战1 小时前
《大模型面试宝典》(2026版) 正式发布!
人工智能·深度学习·算法·面试·职场和发展·大模型
菜鸟233号2 小时前
力扣213 打家劫舍II java实现
java·数据结构·算法·leetcode
狐573 小时前
2026-01-18-LeetCode刷题笔记-1895-最大的幻方
笔记·算法·leetcode
Q741_1473 小时前
C++ 队列 宽度优先搜索 BFS 力扣 662. 二叉树最大宽度 每日一题
c++·算法·leetcode·bfs·宽度优先
Pluchon3 小时前
硅基计划4.0 算法 动态规划进阶
java·数据结构·算法·动态规划