经典算法 (A/B) mod C

(A/B) mod C

问题描述

求(A/B)%C,但由于A和B实在太大了,我们只给出A % C,B % C。

(我们保证给定的A必能被B整除,且gcd(B,C) = 1)。

输入描述

输入一行三个整数,分别是A % C,B % C,C。

输出描述

输出(A/B)%C的值。

输入示例1

in 复制代码
22 11 49

输出示例1

out 复制代码
2

样例解释

in 复制代码
(6000 / 60) % 49 = 2
60与49最大公约数为1,
6000%49 = 22,60 % 49 = 11
输入22 11 49
输出2

输入示例2

in 复制代码
1000 53 9973

输出示例2

out 复制代码
7922

输入示例3

in 复制代码
87 1022 9973

输出示例3

out 复制代码
6060

c++代码(拓展欧几里得算法 通用法,也就是C可以为任意实数)

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

ll A, B, C;

ll extend_gcd(ll a, ll b, ll &x, ll &y) {//返回d = gcd(a, b),并且找到ax + by = d的一个特解x,y。
    if (b == 0) { x = 1, y = 0; return a; }
    ll d = extend_gcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}


ll mod_inverse(ll B, ll C) {//返回B mod C的逆
    ll x, y;
    extend_gcd(B, C, x, y);//x可能是负数
    return (x % C + C) % C;
}

int main() {
    cin >> A >> B >> C;
    cout << (A * mod_inverse(B, C)) % C;
    return 0;
}//by wqs

c++代码(特别地,当C为质数的时候,可以使用费马小定理,不是通用法)

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

ll A, B, C;

ll fastPow(ll a, ll b, ll mod) {
    if (b == 0) return 1 % mod;
    if (b == 1) return a % mod;
    ll k = fastPow(a, b / 2, mod);
    if (b % 2 == 0) return (k * k) % mod;
    else return (((k * k) % mod) * a) % mod;
}

ll mod_inverse(ll B, ll C) { return fastPow(B, C - 2, C); }

int main() {
    cin >> A >> B >> C;//前提C为质数
    cout << (A * mod_inverse(B, C)) % C;
    return 0;
}//by wqs

题目解析

之所以要求gcd(B,C) = 1,是因为gcd(B,C) != 1的时候会有多个答案,这是硬性要求,否则题目无解。

然后我们要对C分类讨论。

如果C是质数,一般使用费马小定理。

如果C不是质数,一般使用通用法拓展欧几里得算法。

一般涉及到除法取模,模值都是质数,费马小定理用的更多。

相关推荐
第九序言T5 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
Sakura_j_h_5 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
ZhengEnCi6 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
龙亘川6 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人6 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David6 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1007 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
Pniubi7 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6187 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang7 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain