非常简易的还原分数方法
感谢 @unputdownable
问题简述
给定素数
做法
考虑
接下来证明这样就得到了所有正整数解(负数解一定对应某个正数解,不需要求)。考虑任何一组解,把它带入
代码
LL kpow(LL x, LL k, LL p) { LL r = 1; while (k) { if (k & 1) r = (__int128)r * x % p; x = (__int128)x * x % p; k >>= 1; } return r; } pair<LL, LL> recover(LL x, LL p) { vector<LL> a; LL invx = kpow(x, p - 2, p), pp = p; while (x) { a.push_back(x); LL t = x; x = p % x; p = t; } pair<LL, LL> res{pp, pp}; for (auto ca : a) { LL cb = (__int128)ca * invx % pp; ca = min(ca, pp - ca); cb = min(cb, pp - cb); if (max(res.first, res.second) > max(ca, cb)) res = {ca, cb}; } return res; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现