通过简单分析可以得知,只有当个位数为0,1,5,6的时候有可能是自守数,所以可以根据此特征来求解:
def fun(x):
y = x**2
a = str(x)
b = str(y)
if a==b[-len(a):]:
# print(x)
return 1
else:
return 0
import math
n = int(input())
num = 0
ls = [0, 1, 5, 6]
f = math.ceil(n/10)
for i in range(f):
for j in ls:
if j+10*i<=n:
num += fun(j+10*i)
else:
break
print(num)

京公网安备 11010502036488号