zoukankan      html  css  js  c++  java
  • Problem 14

    Problem 14

    # Problem_14.py
    """
    The following iterative sequence is defined for the set of positive integers:
    
    n → n/2 (n is even)
    n → 3n + 1 (n is odd)
    
    Using the rule above and starting with 13, we generate the following sequence:
    
    13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
    It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.
    
    Which starting number, under one million, produces the longest chain?
    从一百万一下的哪一个数字开始可以产生最长的链呢?
    NOTE: Once the chain starts the terms are allowed to go above one million.
    """
    
    
    def is_even_or_odd(num):
        if num % 2 == 0:
            return 'even'
        else:
            return 'odd'
    
    
    def chain(num):
        li = []
        li.append(num)
        while True:
            if num != 1:
                if is_even_or_odd(num) == 'even':
                    num //= 2
                    li.append(num)
                else:
                    num *= 3
                    num += 1
                    li.append(num)
            else:
                break
        return li
    
    
    if __name__ == '__main__':
        max_chain_length = 0
        max_chain_starts = 0
        for i in range(1, 1000001):
            li = chain(i)
            if len(li) > max_chain_length:
                max_chain_length = len(li)
                max_chain_starts = i
                print(i, len(li))
        print(max_chain_starts, max_chain_length)
        
    Resistance is Futile!
  • 相关阅读:
    详细分析Orchard的Content、Drivers, Shapes and Placement 类型
    什么是现代的应用程序?
    MySQL锁详解!(转载)
    EF DataFirst修改数据类型
    EF+LINQ事物处理
    .net防止SQL注入的一种方式
    .net解决Xss攻击
    IDEA创建Struts2报错——web.xml
    WebServer搭建过程
    设计模式——观察者模式
  • 原文地址:https://www.cnblogs.com/noonjuan/p/10962246.html
Copyright © 2011-2022 走看看