• #Printable chars are your ally.
  • #num = 29th prime-number. collatz-conjecture(num)
  • 先写脚本求出第29个素数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def max_prime_number(max_num):
    """
    求max_num内最大的质数
    """
    i = max_num
    while True:
        i-=1
        mid = int(i/2) + 1
        for j in range(2,mid):
            if i % j == 0:
                break
        else:
            return i

def find_prime_number(num):
    """
    求第num个质数
    """
    flag = 0
    i = 1
    while True:
        i+=1
        mid = int(i/2) + 1
        for j in range(2,mid):
            if i % j == 0:
                break
        else:
            flag += 1
            if flag == num:
                return i

if __name__ == "__main__":
    p_num = find_prime_number(29)
    p2 = max_prime_number(10)
    print(p2)
    print(p_num)
  • 写脚本实现科拉茨猜想,并过虑可打印字符
  • 任取一个正整数,如果这个数是偶数,则除以二。如果是奇数,乘以3再加1。重复上述步骤,最后起始数都会变成1时停止。这就是著名的科拉茨猜想
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import string
my_printable = string.printable # 可打印字符

def is_printable(i):
    """
    判断输入的数字是否能转换成可打印字符,是则返回对应字符
    """
    try:
        str_i = chr(i)
    except:
        str_i = None
    if str_i != None and my_printable.find(str_i) != -1:
        return str_i
    else:
        return None

def collatz_conjecture(num):
    i = num
    char_list = []
    str_i = is_printable(i)
    if str_i != None:
        char_list.append(str_i)
    while i != 1:
        if i % 2 == 1:
            i = i * 3 + 1
        else:
            i = i // 2 # 用整除,避免类型转换
        str_i = is_printable(i)
        if str_i != None:
            char_list.append(str_i)
    return "".join(char_list)

def main():
    num = 109
    my_str = collatz_conjecture(num)
    print(my_str)

if __name__ == "__main__":
    main()