美文网首页
「python」简单算法

「python」简单算法

作者: 叨码 | 来源:发表于2019-07-16 00:16 被阅读0次

    几个算法的练习题,重在锻炼解决问题的步骤和方法。
    练习一:寻找水仙花

    水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)

    # _*_ coding: utf-8 _*_
    __author__ = 'ing'
    __date__ = '2019-07-15 15:18'
    """寻找100-999间的水仙花数
    水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
    // python3中表示整数除法 / 表示浮点数除法
    """
    
    for num in range(100, 1000):
        low = num % 10
        mid = num // 10 % 10
        high = num // 100
        if num == low ** 3 + mid ** 3 + high ** 3:
            print(num)
    
    

    练习二:寻找完美数

    完全数(Perfect number),又称完美数完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。

    方法一,完全直译其概念写法,效率较低

    # _*_ coding: utf-8 _*_
    __author__ = 'ing'
    __date__ = '2019-07-15 23:27'
    """
    找出1~9999之间的所有完美数
    完美数是除自身外其他所有因子的和正好等于这个数本身的数
    例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
    """
    for num in range(1, 10000):
        sum = 0
        for factor in range(1, num):
            # 判断factor是否是sum的因子
            if num % factor == 0:
                sum += factor
        if sum == num:
            print(num)
    

    方法二:对于某一整数来说,其最大因子为n/2 (若n为偶数时,若为奇数最大因子小于n/2),在n/2〜n-1范围内没有数据可以整除此数。据此,我们可以把遍历范围缩小至1〜n-1,这样程序效率可以提高一倍

    # _*_ coding: utf-8 _*_
    __author__ = 'ing'
    __date__ = '2019-07-15 23:27'
    """
    找出1~9999之间的所有完美数
    完美数是除自身外其他所有因子的和正好等于这个数本身的数
    例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
    """
    import math
    
    for num in range(1, 10000):
        sum = 0
        for factor in range(1, int(math.sqrt(num)) + 1):
            if num % factor == 0:
                sum += factor
                # 加上另一半因子
                if factor > 1 and num / factor != factor:
                    sum += num / factor
    
        if sum == num:
            print(num)
    
    

    相关文章

      网友评论

          本文标题:「python」简单算法

          本文链接:https://www.haomeiwen.com/subject/yosokctx.html