2019-2020PtrCampDay8-I.Euclid's Algorithm-数论
link:https://codeforces.com/gym/103261/problem/I
题意:给
来复读一下题解
对每个质因子
- (1)如果
不是 的因子,取 ,则 ,对答案没有贡献 - (2)否则假设
中有 个 因子, 中有 个 因子,同时为了使得幂次最小,我们不妨考虑 的那些 ,那么对于每一项 而言,恰有 个 因子 - 而
变大 之后,因子个数会先变多 个,而我们假设 ,那么 ,而 可能不变,可能减少 - 对于大部分
情况来说,显然 因子个数只取决于第一项,因为每往后一项至少多一个 因子,肯定没法通过加法( 进制下的进位)得到更多的 因子,因此 时质因子的贡献就是 . - 而这里有一个魔鬼细节,对于
, 要想保持不变,必然有 ,也就是只有 的情况是特殊的:此时这两项都是 和 个 的因子,往后也依然是这样,这时候至少有 个 因子 - 而这里又可以断言,其实至多也是
个 因子!!!因为考虑 有 个 因子,而它会等于 ,右边是 的两个式子相加,如果其至少有 个 因子,左边则至少有 个 因子,这是矛盾的
综上,对每个
- 首先,必须要
才有贡献:、 - (1)一般情况是
的贡献 - (2)特殊的,
, ,则幂次是
然后我们去写一发,发现wa了,为什么呢…
(2)里面还有bug…如果
ChatGPT写的Python代码:
import math import sys def main(): d, k = map(int, sys.stdin.read().split()) if k==2: print(math.gcd(k,d)*d) return qd, qk = 0, 0 while d % 2 == 0: d //= 2 qd += 1 while k % 2 == 0: k //= 2 qk += 1 ans = d * math.gcd(pow(d, 332), k) if qd == 1: ans *= 2 ** (qk + 2) elif qd!=0: ans *= 2 ** (qk + qd) print(ans) if __name__ == "__main__": main()
分类:
数论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律