近期做的两道题。
Problem
ProjetEuler-429
定义 d 是 n 的单位因子,当且仅当 gcd(d,dn)=1 。
令 f(n) 表示 n 的所有单位因子的平方和。例如 f(24)=12+32+82+242=650
求 f(108!)
湖大 ACM 区域赛 A
求 ⌈(a+b)n⌉modm 。
b,n≤230,a,m≤215
保证 (a−1)2<b<a2 。
Solution
ProjetEuler-429
显然 f 积性。
显然 f(px)=1+p2x 。
然后线性筛法筛过去没了。
湖大 ACM 区域赛 A
注意到:
(a+b)n+(a−b)n=x=0∑n(xn)an−x(bx+(−b)x).
当 x 为奇数时 (b)x+(−b)x=0 ,当 x 为偶数时 (b)x+(−b)x 为整数,所以 (a+b)n+(a−b)n 为整数,又由于 0<a−b<1 所以 ⌈(a+b)n⌉=(a+b)n+(a−b)n 。
现在考虑求 (a+b)n+(a−b)n 。我们可以把它看成是一个二阶线性齐次递推式的通项公式,只要还原出递推式出来,就可以用矩阵乘法了。
考虑 x1=2a,x2=2a2+2b,xn=pxn−1+qxn−2 。特征根方程是 x2−px−q=0 。我们知道两个根分别是 a+b 和 a−b ,韦达可得 p=2a,q=b−a2 ,所以 xn=2axn−1+(b−a2)xn−2。
如果考虑直接求 modm 的循环节长度然后暴力不知道怎么样。