《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;
}
相关推荐
历程里程碑8 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
你撅嘴真丑15 小时前
第九章-数字三角形
算法
uesowys15 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder15 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮15 小时前
AI 视觉连载1:像素
算法
智驱力人工智能16 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥17 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风17 小时前
代码随想录第十五天
数据结构·算法·leetcode
XX風17 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT0617 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法