概要
回顾完美数,自守数,水仙花数,根号2感受最美公式。
2 \sqrt{2} 2
毕达哥拉斯创立了一个研究天文、几何、数论及音乐的秘密教团。他们本来想要把整个世界都化为数字,但是却找不到任何一条线段能够用来同时度量正方形的对角线与边,于是这个梦想破灭了。是他们发现了 2 \sqrt{2} 2。
![]() |
---|
无法接受自己发现的 2 \sqrt{2} 2,挣扎几百年后最终消失了。但 2 \sqrt{2} 2的图形证明,最大公度量对后面的求最大公约数很有帮助。这种直尺和圆规的操作还产生了三分律。
a = b , a < b , a > b a=b,a<b,a>b a=b,a<b,a>b
三分律经常出现在代码中。
判断完美数
因子相加等于自己的数,包括1,但不含自己。比如 6 [1, 2, 3],28 [1, 2, 14, 4, 7],496 [1, 2, 248, 4, 124, 8, 62, 16, 31]
def isperfect(n):
'''
因子相加等于自己的数,包括1,但不含自己
6 [1, 2, 3]
28 [1, 2, 14, 4, 7]
496 [1, 2, 248, 4, 124, 8, 62, 16, 31]
'''
if n <= 1:
return False, 1
s = 1
X = [1]
for x in range(2, n//2):
if n % x == 0 and x not in X:#成对添加的,后面的数字可能在前面添加过了
#print(n / x, X)
s = int(s + x + n/x)
X.append(x)
X.append(int(n / x))
return s - n == 0, X
验证
======
isperfect(28)
(True, [1, 2, 14, 4, 7])
isperfect(228)
(False, [1, 2, 114, 3, 76, 4, 57, 6, 38, 12, 19])
自守数
平方尾数等于自己的数是自守数。就是平方求余10,100,1000…(10位数的幂)等于自己的数。比如5,平方25的个位是5;25的平方625的尾数是25。
print("the conservative number in 1000",[n for n in range(1, 1000) if (n * n) % (10 ** len(str(n))) == n])
验证
the conservative number in 1000 [1, 5, 6, 25, 76, 376, 625]
程序求了一千以内的自守数。
水仙花数
自幂数是指一个 n 位数,它每位上的数字的 n 次幂之和等于它本身。
同类的还有独身数、水仙花数、四叶玫瑰数、五角星数、六合数、北斗七星数、八仙数、九九重阳数
代码
def f(n):
for i in range(10**(n - 1), 10**n):
sum = 0
temp = i
#0也是False,None,"",(),[],{}
while temp:
sum += (temp%10) ** n
temp = int(temp/10)
if sum == i:
print(i)
验证
for n in range(1,10):f(n)
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474
54748
92727
93084
548834
1741725
4210818
9800817
9926315
24678050
24678051
88593477
146511208
472335975
534494836
912985153