n = int(input())
perfect_num = 0
# 【错误点1】原来把pd_count写在循环外,会导致因子列表“累积”
# 【改正方法】把pd_count的初始化放到内层,每次判断新数都重新开始
# 【错误点2】原来在内层循环修改了外层循环变量i,导致循环被破坏
# 【改正方法】用一个单独的变量num来处理当前数,不直接修改循环变量
# 【错误点3】原来的找因子逻辑是“不断除原数”,这是质因数分解,不是找所有真因子
# 【改正方法】遍历2到sqrt(num),成对找因子,这样才不会漏
# 从1到n,逐个判断
for i in range(1, n + 1):
if i == 1:
continue # 1没有真因子,直接跳过
# ✅ 改正错误1:每次判断新数,都重置因子列表
pd_count = [1] # 1是所有数的真因子,先放进去
num = i # ✅ 改正错误2:用单独变量num处理,不修改外层循环的i
is_perfect = False
# ✅ 改正错误3:用成对找因子的方式,遍历到sqrt(num)
for pd in range(2, int(num ** 0.5) + 1):
if num % pd == 0:
pd_count.append(pd) # pd是因子,加入列表
other = num // pd
if other != pd: # 避免平方数重复添加(比如16的4只加一次)
pd_count.append(other)
# 求和判断是否是完全数
if sum(pd_count) == num:
perfect_num += 1
print(perfect_num)
# 偷鸡
# n = int(input())
# count = 0
# if n >= 6:
# count += 1
# if n >= 28:
# count += 1
# if n >= 496:
# count += 1
# if n >= 8128:
# count += 1
# print(count)