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!
  • 相关阅读:
    Gentle.Net学习笔记一:配置文件设置
    啥时候咱能用上NExcelApi?
    ibus no input window
    QT && GDAL
    安装 purcell 的emacs.d 配置文件
    进程
    C++的cout高阶格式化操作
    C++ 虚函数表解析
    [转]C程序内存区域分配(5个段作用)
    如何写Makefile文件
  • 原文地址:https://www.cnblogs.com/noonjuan/p/10962246.html
Copyright © 2011-2022 走看看