Python【每日一问】27

问:

【基础题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)

 

提高题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。 以后每天早上都吃了前一天剩下的一半多一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?

def monkey_peach(n):
    peach = 1
    for i in range(1, n):
        peach = 2 * (peach + 1)
​
    print(peach)
​
​
monkey_peach(10)

 

原文地址:https://www.cnblogs.com/ElegantSmile/p/10895114.html