儿童数
若一个正整数 n n n 满足 n 61 n^{61} n61 整除 2024 ! 2024! 2024!,即 2024 ! 2024! 2024! 除以 n 61 n^{61} n61 的余数为 0 0 0,则称 n n n 为儿童数。
现在,请你计算在区间 [ 1 , + ∞ ) [1, +\infty) [1,+∞) 内一共有多少个儿童数。
前置知识
-
勒让德公式
v p ( n ! ) = ∑ k = 1 ∞ ⌊ n p k ⌋ v_p(n!) = \sum_{k=1}^{\infty} \left\lfloor \frac{n}{p^k} \right\rfloor vp(n!)=k=1∑∞⌊pkn⌋
可以用这个公式计算 n ! n! n! 的质因数 p p p 的次数。
-
整除的充要条件
设 a a a 和 b b b 是正整数,且它们的质因数分解为:
a = p 1 α 1 p 2 α 2 ⋯ p k α k , b = p 1 β 1 p 2 β 2 ⋯ p k β k a = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k}, \quad b = p_1^{\beta_1} p_2^{\beta_2} \cdots p_k^{\beta_k} a=p1α1p2α2⋯pkαk,b=p1β1p2β2⋯pkβk
(若某个质数 p i p_i pi 不在 a a a 或 b b b 的分解中,则对应的指数 α i \alpha_i αi 或 β i \beta_i βi 视为 0 0 0。)
整除的充要条件
a ∣ b a \mid b a∣b 当且仅当 ∀ i ∈ { 1 , 2 , … , k } , α i ≤ β i \forall i \in \{1, 2, \dots, k\}, \alpha_i \leq \beta_i ∀i∈{1,2,…,k},αi≤βi。
即 a a a 的所有质因数的幂次都不超过 b b b 的对应幂次。
所以只要分解 2024 ! 2024! 2024!,然后要满足每个质因数的幂次 p p p 满足 61 p ≤ e 61p \leq e 61p≤e。故最终答案为 e / / 61 + 1 e // 61 + 1 e//61+1。
def is_prime(x):
if x<=1:
return False
for i in range(2,x):
if x%i==0:
return False
return True
d={}
for i in range(2,2024):
if is_prime(i):
cnt=0
j=i
while j<=2024:
cnt+=2024//j
j*=i
d[i]=cnt
# print(d)
ans=1
for x,cnt in d.items():
if cnt>=61:
ans*=(cnt//61+1)
print(ans)