专栏文章

lowbit(a^n-b^n)

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min00xcz
此快照首次捕获于
2025/12/01 18:20
3 个月前
此快照最后确认于
2025/12/01 18:20
3 个月前
查看原文
给定 a,b,n106a,b,n\le 10^6,求 lowbit(anbn)\mathrm{lowbit}(a^n-b^n)。有原题,但是在哪呢。
显然 a,ba,b 不都是奇数的情况下可以转化为都是奇数的情况或者直接求出结果,问题就在于都是奇数怎么求。
有因式分解:anbn=(ab)(an1+an2b+an3b2++abn2+bn1)a^n-b^n=(a-b)(a^{n-1}+a^{n-2}b+a^{n-3}b^2+\dots+ab^{n-2}+b^{n-1}),当 nn 是奇数时右边显然时奇数,故答案为 lowbit(ab)\mathrm{lowbit}(a-b)。如果 nn 是偶数?
n=2kn=2k,则 anbn=(ak)2(bk)2=(akbk)(ak+bk)a^n-b^n=(a^k)^2-(b^k)^2=(a^k-b^k)(a^k+b^k)。那么左边可以递归下去,右边呢?
如果 kk 是偶数,由于 a,ba,b 都是奇数,他们的平方模四必然余 11,加起来余 22,所以右边的 lowbit\mathrm{lowbit} 必然为 22。而如果 kk 是奇数,有因式分解但是我不想打 KaTeX\KaTeX 了,反正是 (a+b)(a+b) 乘一个奇数,显然其 lowbit\mathrm{lowbit} 就是 lowbit(a+b)\mathrm{lowbit}(a+b)
总共递归 log2(lowbit(n2))\log_2\left(\mathrm{lowbit}\left(\dfrac{n}{2}\right)\right) 层,除了最后一层之外对于答案的贡献均只为 22,而最后一层是 lowbit(ab)lowbit(a+b)=lowbit(a2b2)\newcommand{\lowbit}{\mathrm{lowbit}}\lowbit(a-b)\lowbit(a+b) = \lowbit(a^2-b^2),故答案为 lowbit(a2b2)(lowbit(n)1)\newcommand{\lowbit}{\mathrm{lowbit}}\lowbit(a^2-b^2)(\lowbit(n)-1)
前面对于不全是奇数套的壳需要快速幂。所以时间复杂度是 O(logn+logloga)\mathcal O(\log n+\log \log a)

评论

0 条评论,欢迎与作者交流。

正在加载评论...