• 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)

     

  • 相关阅读:
    SharePoint 2013 开启訪问请求
    鸟哥Linux私房菜知识点总结3到5章
    火狐浏览器中加入httprequest的方法
    xhprof安装&&使用
    第一篇、Android Supersu 权限管理定制,隐藏过滤权限,指定APP最高权限
    Android 推断程序在手机中是否是活动状态或者正在执行状态
    【Java并发编程实战】—–synchronized
    24岁菜鸟,能一个人撑起App开发吗
    技术与经济之八:关于优惠与红包
    关于notepad++如何自动补全标签的问题
  • 原文地址:https://www.cnblogs.com/ElegantSmile/p/10895114.html
Copyright © 2020-2023  润新知