给定
a,b,n≤106,求
lowbit(an−bn)。有原题,但是在哪呢。
显然
a,b 不都是奇数的情况下可以转化为都是奇数的情况或者直接求出结果,问题就在于都是奇数怎么求。
有因式分解:
an−bn=(a−b)(an−1+an−2b+an−3b2+⋯+abn−2+bn−1),当
n 是奇数时右边显然时奇数,故答案为
lowbit(a−b)。如果
n 是偶数?
n=2k,则
an−bn=(ak)2−(bk)2=(ak−bk)(ak+bk)。那么左边可以递归下去,右边呢?
如果
k 是偶数,由于
a,b 都是奇数,他们的平方模四必然余
1,加起来余
2,所以右边的
lowbit 必然为
2。而如果
k 是奇数,有因式分解但是我不想打
KATEX 了,反正是
(a+b) 乘一个奇数,显然其
lowbit 就是
lowbit(a+b)。
总共递归
log2(lowbit(2n)) 层,除了最后一层之外对于答案的贡献均只为
2,而最后一层是
lowbit(a−b)lowbit(a+b)=lowbit(a2−b2),故答案为
lowbit(a2−b2)(lowbit(n)−1)。
前面对于不全是奇数套的壳需要快速幂。所以时间复杂度是
O(logn+logloga)。