题解 [PR #7] 大凯的疑惑
垃圾题解毁我青春
将给的式子拆开,发现是
对组成 \(x\) 的每个质因数 \(p\) 考虑其最大次数
当 \(p\nmid d\) 时,代入 \(a=p\) 发现原式 \(\not\equiv 0\pmod{p}\),所以 \(x\) 一定不包含这个质因子
令 \(C(n)=\max\{i\mid p^i|n\}\),
当 \(p\mid d\) 时,其次数的最大取值就是 \(\min\{C((a+d)^k-a^k)\}\),现在来求这个东西
还是先拆开成最上面的形式
然后一个引理:
\(C(\dbinom{k}{i})=C(k)-C(i), i\in[1, p^{C(k)}]\)
证明:
先看看这个引理长得像什么
貌似是在 \(p\) 进制下 \(\binom{k}{i}\) 末尾 0 的个数 \(k\) 等于 \(k\) 末尾 0 个数减去 \(i\) 末位 0个数
考虑一下 Lucas 定理,发现两者末位都是 0 的位贡献是乘 1 可以忽略
再考虑一下 Kummer 定理发现若 \(k\) 的这一位是 0 而 \(i\) 的这一位不是 0 则 \(i+(k-i)\) 时在这里一定产生了一次进位
而根据 \(i\leqslant p^{C(k)}\) 的限制所有进位情况一定有且仅有这一种可能
Quite Easy Done.Q.E.D.
令 \(\alpha=C(d), \beta=C(k)\)
于是将一个 \(i\) 处的含 \(p\) 幂次写成 \(\beta-C(i)+i\alpha\)
发现 \(\alpha\geqslant 1\and C(i+1)-C(i)\leqslant 1\),所以这个关于 \(i\) 的函数单调不降
又因为我们要找最小的幂次,所以其实只需要考虑前几项
仔细思考发现只需要考虑前两项,是在 \(p=2\) 的时候,其它时候只需考虑 \(i=1\) 那一项
写个对拍发现还需要特判 \(p=2\and k=2\)
然后 \(\gcd\) 处理即可
高精 GCD,懂的都懂
from math import gcd
d, k=map(int, input().split())
ans=d
if (k==2):
if (k%2==0):
ans*=2
else:
if (d%4==2 and k%2==0):
ans*=2
while 1:
tem=gcd(d, k)
if (tem==1):
break
ans*=tem
k//=tem
print(ans)