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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #!/bin/env python3 ## -*-coding: utf-8 -*- from colorama import Fore, init from time import time from multiprocessing import Pool import multiprocessing # 设置查找亲和数的范围 AX_NUMBER = 2000 # 得到因数列表 # 输入:number 需要计算其因数的数字 # 输出:retList 不包括其自身的因数列表 def getYSList(number): retList = [1] i = 2 while i < number: if number % i == 0: retList.append(i) i += 1 # print(retList) return retList # 计算因数之和 def calSumOfYS(number): returnValue = 1 i = 2 while i if number % i == 0: returnValue += i i += 1 return returnValue # 求亲和数方法II def calQinhe2(number_start, number_scope): j = 0 for number in range(number_start, number_scope): sumNumberYS = calSumOfYS(number) if sumNumberYS <= number: continue if number == calSumOfYS(sumNumberYS): j += 1 print("找到第", Fore.BLUE + "[-]" % j, "对亲和数:", Fore.RED + "m" % number , " 和 ", Fore.RED + "m" % sumNumberYS) # 计算亲和数多线程 def calQinheM(number): sumNumberYS = calSumOfYS(number) if sumNumberYS > number: if number == calSumOfYS(sumNumberYS): print("找到亲和数:", Fore.RED + "m" % number , " 和 ", Fore.RED + "m" % sumNumberYS) #计算完美数II def calWanmei2(number_start, number_scope): j = 0 for number in range(number_start, number_scope): if calSumOfYS(number) == number: j += 1 print("找到第", Fore.CYAN + "[-]" % j, "个完美数:", Fore.RED + "m" % number) # 计算完美数多线程 def calWanmeiM(number): if calSumOfYS(number) == number: print("找到完美数:",Fore.RED + "m" % number) if __name__ == '__main__': # 找亲和数 init(autoreset=True) number_scope = int(input("请输入计算范围: " ) or MAX_NUMBER) pool = Pool(multiprocessing.cpu_count()) print(Fore.BLUE + ("#"*10 + "找亲和数" + "#"*10)) beginT = time() calQinhe2(2, number_scope) endT = time() print("calQinhe2 用了 %.5f 秒" % (endT-beginT)) beginT = time() pool.map(calQinheM, [i for i in range(2, number_scope)]) endT = time() print("calQinheM 用了 %.5f 秒" % (endT-beginT)) # 找完美数 print("\n\n\n") beginT = time() calWanmei2(2, number_scope) endT = time() print("calWanmei2 用了 %.5f 秒" % (endT-beginT)) beginT = time() params = [ i for i in range(2, number_scope)] #calWanmei2(2, number_scope) pool.map(calWanmeiM, params) endT = time() print("calWanmeiM 用了 %.5f 秒" % (endT-beginT))
|