问:
【基础题1】:将一个正整数分解质因数。例如:输入 90, 打印出 90=2*3*3*5 。
【基础题2】:一个数如果恰好等于它的因子之和,这个数就称为“完数” 。例如6=1+2+3。请找出 1000 以内的所有完数。
【提高题】:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。 以后每天早上都吃了前一天剩下的一半多一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
答:
基础题1:将一个正整数分解质因数。例如:输入 90, 打印出 90=233*5 。
方法1:
def prime(n): l = [] while n > 1: for i in range(2, n+1): if n % i == 0: n = int(n / i) l.append(i) break return l while 1: s = eval(input("请输入一个正整数:")) if s > 0: print(s, "=", " * ".join([str(x) for x in prime(s)])) else: print("请输入正确的正整数")
方法2:
def positive_int_split(): num = int(input("Input a positive integer:")) assert num >= 2 print("{}=".format(num), end="") while num != 1: for i in range(2, num + 1): if num % i == 0: num = int(num / i) if num == 1: print(i) else: print("{}*".format(i),end="") break if __name__ == '__main__': positive_int_split()
方法3:
from time import time def get_positive_prime_factors(the_number): result_list = [] a_number = the_number while True: if a_number % 2 == 0: result_list.append("2") a_number = a_number / 2 else: break prime_factor = 3 while True: if a_number % prime_factor != 0: prime_factor += 2 else: result_list.append(str(prime_factor)) a_number = a_number / prime_factor if a_number == 1: break return result_list assert get_positive_prime_factors(90) == ["2", "3", "3", "5"], "wrong answer" while True: begin = time() user_input = input("请输入要分解的数字:") if user_input == None or user_input == "": break number = int(user_input) prime_factors = get_positive_prime_factors(number) prime_factor_string = "*".join(prime_factors) end = time() duration = end - begin print(f"{number}={prime_factor_string}") print(f"{duration}s")
基础题2:一个数如果恰好等于它的因子之和,这个数就称为“完数” 。例如6=1+2+3。请找出 1000 以内的所有完数。
for i in range(1, 1001): list1 = [] for j in range(1, i): if i % j == 0: list1.append(j) # sum 函数求和 if sum(list1) == i: print("%d是完数,因子是" % i, list1)
def monkey_peach(n): peach = 1 for i in range(1, n): peach = 2 * (peach + 1) print(peach) monkey_peach(10)