《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;
}
相关推荐
Gorway1 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风2 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect2 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
灵感__idea15 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub2 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉