zoukankan      html  css  js  c++  java
  • 考拉兹猜想,100万以内的数

    import lombok.extern.slf4j.Slf4j;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    
    import java.util.List;
    
    /**
     * @author: small-sunshine
     * @Description:考拉兹猜想,100万以内的数 考拉兹猜想是1927年提出的猜想:
     * 一个正整数,如果是奇数就乘以3再加1,如果是偶数就除以2,这样经过若干个次数,最终回到1。
     * @date: 2021/6/25 1:00 下午
     */
    @Slf4j
    public class CollatzConjecture {
    
        //百万之内
        static int num = 1000 * 1000;
        //存放最终结果
        static List<Integer> count = new ArrayList();
        //存放运算结果
        static int[] array = new int[num];
    
        public static void main(String[] args) {
           long start = System.currentTimeMillis();
            for (int i = 1; i < num; i++) {
                long j = i + 0L;
                array[i] = kill(j, 1);
            }
            System.out.println(Arrays.toString(array));
            int[] arrayCopy = Arrays.copyOf(array, num);
            Arrays.sort(array);
            for (int i = 1; i < num; i++) {
                if (arrayCopy[i] == array[num - 1]) {
                    count.add(i);
                }
            }
            long end = System.currentTimeMillis();
            log.info("用时:" + (end - start) + "ms");
            log.info(String.format("这些数:%s 的序列最多是:%d", count.toString(), array[num - 1]));
        }
    
        /**
         * 考拉兹猜想-递归处理三个条件
         * 1、一个问题的解可以分解为几个子问题的解
         * 2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
         * 3、存在递归终止条件
         *
         * @param i
         * @return int
         */
        public static int kill(long i, int count) {
            if (i <= 0) {
                return 0;
            }
            if (i == 1) {
                return count;
            }
            long j = i % 2 == 0 ? i >> 1 : 3 * i + 1;
            count++;
            return kill(j, count);
        }
    }
    

    运行结果:

    用时:623ms
    这些数:[837799] 的序列最多是:525
    
    缘于生活,而归于工作。本人所书,而意于分享。 如有转载,请注明出处! --活出自己范儿
  • 相关阅读:
    Comet OJ
    Comet OJ
    Comet OJ
    Comet OJ
    Codeforces Round #562 (Div. 2)
    P1202 USACO1.1 黑色星期五
    P1201 USACO1.1 贪婪的送礼者
    【线段树】HDU1166:敌兵布阵
    标准C++中的string类的用法总结(转)
    【递归】分形
  • 原文地址:https://www.cnblogs.com/Small-sunshine/p/14930935.html
Copyright © 2011-2022 走看看