#完全数都以6或者8结尾
#除6以外的完全数都可以表示为连续奇立方之和
n = int(input())
cnt = 1 if n >= 6 else 0
s = 1
i = 3
while s <= n:
s += i ** 3
i += 2
if s <= n and s % 10 in (6, 8):
# 验证
if sum(j for j in range(1, s) if s % j == 0) == s:
cnt += 1
print(cnt)
用两个条件筛选(其实就用连续奇立方筛选也可以),最后验证,验证时用range(1,s)刚好s不算在range里,真因子不包含自身,余数为0的就是约数。
最好还是背一下完全数,毕竟也比较稀有。

京公网安备 11010502036488号