目录:
1.西西弗斯黑洞
2.冰雹猜想
3.圣经数
4.卡普雷卡尔黑洞
5.数学黑洞1和4
6.水仙花数
7.完全数
8.亲密数
9.回文数
10.勾股数
11.四方定理
12.尼科彻斯定理
1 #西西弗斯黑洞:取随机数n,根据其偶数个数、奇数个数、随机数长度组成一个新的数,再重复上述步骤,最终一定会得到123。
2 number=input("非负整数:a(1)=")
3 i=1
4 while number != "123":
5 i+=1
6 a=0
7 l=len(number) #长度
8 for n in number:
9 a=a+(eval(n)%2) #奇数个数
10 b=l-a #偶数个数
11 number=str(b)+str(a)+str(l)
12 print("a("+ str(i) +")=",number,"")
1 #冰雹猜想:一个正整数x,如果是奇数就乘以3再加1,如果是偶数就除以2,重复上述操作,最终回到1。
2 n=int(input("正整数n="))
3 while n != 1:
4 if n%2==0:
5 n=n/2
6 print(int(n))
7 else:
8 n=n*3+1
9 print(int(n))
1 #圣经数:任意一个3的倍数,把各位数字的立方相加,得出和,再把和的各位数字立方后相加,如此反复进行,最后必然出现“圣经数153”。
2 i=input("随机正整数i=")
3 number=3*i
4 while number != "153":
5 a=0
6 for n in number:
7 a=a+(eval(n))**3
8 number=str(a)
9 print(number)
1 # 卡普雷卡尔黑洞:取任何一个4位数(4个数字均为同一个数字的除外),将组成该数的4个数字重新组合成可能的最大数和最小数,
2 # 再将两者求差;对此差值重复同样过程,最后总是达到卡普雷卡尔黑洞值:6174。
3 x=int(input("各位不都相等的4位数="))
4 def to_array(x):
5 list = []
6 for i in range(4):
7 a=x%10
8 list.append(a)
9 x=int(x/10)
10 return list
11 def to_number(list):
12 num=0
13 for i in range(4):
14 num=num*10+list[i]
15 return num
16 while x !=6174:
17 list=to_array(x)
18 list.sort()
19 min=to_number(list)
20 list.sort(reverse=True)
21 max=to_number(list)
22 x=max-min
23 print(x)
1 #数学黑洞1和4:任取一个非0自然数,求出它的各个数位上数字的平方和,得到一个新数;重复上述步骤,如此进行到最后只有两种情况:
2 # 出现1,之后永远都是1;出现4,之后开始按4、16、37、58、89、145、42、20循环。
3 number=input("非0自然数=")
4 while 1 :
5 a=0
6 for n in number:
7 a=a+(eval(n)**2)
8 number=str(a)
9 print(number)
1 #水仙花数:一个3位数每个位上的数字的3次幂之和等于它本身
2 for n in range(100,1000):
3 a=n//100
4 b=(n//10)%10
5 c=n%10
6 k=a**3+b**3+c**3
7 if n==k:
8 print(n)
#完全数:一个数恰好等于它的真因子(即除了自身以外的约数)之和
for n in range(1,1000):
a=0
for i in range(1,n):
if n%i==0:
a=a+i
if n==a:
print(n)
1 #亲密数:如果整数A的真因子之和等于B,且整数B的真因子之和等于A,则将整数A和B称为亲密数。
2 n=int(input("范围为1~"))
3 def f(n):
4 s = 0
5 for i in range(1,n):
6 if n % i == 0:
7 s=s+i
8 return s
9 for b in range(1,n):
10 a = f(b)
11 if b == f(a) and a<b:
12 print(a,b)
1 #回文数:任意自然数的各位数字反向排列所得自然数n1与n相等
2 N=int(input("范围为0~"))
3 for x in range(0,N):
4 str_x = str(x)
5 if len(str_x) > 1:
6 for i in range(0,int(len(str_x)/2)):
7 if str_x[i] == str_x[-i-1]:
8 print(x)
9 else:
10 print(x)
1 #勾股数:可以构成一个直角三角形三边的一组正整数。
2 n=int(input("范围为1~"))
3 for a in range(1,n):
4 for b in range(1,a):
5 for c in range(1,b):
6 if a==(b**2+c**2)**(1/2):
7 print(c,b,a)
1 #四方定理:所有自然数至多只要用四个数的平方和就可以表示。
2 n=int(input("自然数n="))
3 for a in range(0,n):
4 for b in range(a,n):
5 for c in range(b,n):
6 for d in range(c,n+1):
7 if n==a**2+b**2+c**2+d**2:
8 print(a,b,c,d)
1 #尼科彻斯定理:任何一个整数m的立方都可以写成m个连续奇数之和,且m属于[1,100]。
2 m=int(input("输入属于1~100的整数m:"))
3 list=[]
4 a = m**2-m+1
5 for i in range(a,a+m*2,2):
6 list.append(i)
7 sum=m*(m+a-1)
8 if m**3==sum:
9 print(list)