python《信息安全专业导论》期末考试内容(二)

目录:
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)

 

posted @ 2021-01-04 20:49  油菜园12号  阅读(314)  评论(0编辑  收藏  举报