zoukankan      html  css  js  c++  java
  • 续x奇数倍(n+2*x)暴力算法是冠军的算法结合数量

    // 续6单a,a+2,a+4,a+6,a+8,a+10是共同的数。最低要求a

    // 暴力解决方案

    首先对结果,后面将代码粘贴:

    1次连续n=9,连续值个数: 1;耗时: 0ms,总计: 0ms
    2次连续n=25,连续值个数: 1;耗时: 0ms,总计: 0ms
    3次连续n=91,连续值个数: 1;耗时: 0ms,总计: 0ms
    4次连续n=115,连续值个数: 3;耗时: 0ms,总计: 1ms
    5次连续n=115,连续值个数: 3;耗时: 0ms,总计: 1ms
    6次连续n=115,连续值个数: 3;耗时: 0ms,总计: 1ms
    7次连续n=525,连续值个数: 2;耗时: 0ms,总计: 1ms
    8次连续n=525,连续值个数: 2;耗时: 0ms,总计: 1ms
    9次连续n=889,连续值个数: 1;耗时: 0ms,总计: 1ms
    10次连续n=1131,连续值个数: 1;耗时: 0ms,总计: 1ms
    11次连续n=1329,连续值个数: 6;耗时: 0ms,总计: 1ms
    12次连续n=1329,连续值个数: 6;耗时: 0ms,总计: 1ms
    13次连续n=1329,连续值个数: 6;耗时: 0ms,总计: 1ms
    14次连续n=1329,连续值个数: 6;耗时: 0ms,总计: 1ms
    15次连续n=1329,连续值个数: 6;耗时: 0ms,总计: 1ms
    16次连续n=1329,连续值个数: 6;耗时: 0ms,总计: 1ms
    17次连续n=9553,连续值个数: 1;耗时: 2ms,总计: 3ms
    18次连续n=15685,连续值个数: 4;耗时: 1ms,总计: 5ms
    19次连续n=15685,连续值个数: 4;耗时: 1ms,总计: 5ms
    20次连续n=15685,连续值个数: 4;耗时: 1ms,总计: 5ms
    21次连续n=15685,连续值个数: 4;耗时: 1ms,总计: 5ms
    22次连续n=19611,连续值个数: 4;耗时: 2ms,总计: 8ms
    23次连续n=19611,连续值个数: 4;耗时: 2ms,总计: 8ms
    24次连续n=19611,连续值个数: 4;耗时: 2ms,总计: 8ms
    25次连续n=19611,连续值个数: 4;耗时: 2ms,总计: 8ms
    26次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    27次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    28次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    29次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    30次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    31次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    32次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    33次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    34次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    35次连续n=31399,连续值个数: 10;耗时: 5ms,总计: 13ms
    36次连续n=155923,连续值个数: 7;耗时: 92ms,总计: 105ms
    37次连续n=155923,连续值个数: 7;耗时: 92ms,总计: 105ms
    38次连续n=155923,连续值个数: 7;耗时: 92ms,总计: 105ms
    39次连续n=155923,连续值个数: 7;耗时: 92ms,总计: 105ms
    40次连续n=155923,连续值个数: 7;耗时: 92ms,总计: 105ms
    41次连续n=155923,连续值个数: 7;耗时: 92ms,总计: 105ms
    42次连续n=155923,连续值个数: 7;耗时: 93ms,总计: 106ms
    43次连续n=360655,连续值个数: 5;耗时: 243ms,总计: 349ms
    44次连续n=360655,连续值个数: 5;耗时: 243ms,总计: 349ms
    45次连续n=360655,连续值个数: 5;耗时: 243ms,总计: 349ms
    46次连续n=360655,连续值个数: 5;耗时: 243ms,总计: 349ms
    47次连续n=360655,连续值个数: 5;耗时: 243ms,总计: 349ms
    48次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    49次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    50次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    51次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    52次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    53次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    54次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    55次连续n=370263,连续值个数: 8;耗时: 14ms,总计: 363ms
    56次连续n=492115,连续值个数: 1;耗时: 185ms,总计: 548ms
    57次连续n=1349535,连续值个数: 2;耗时: 1854ms,总计: 2402ms
    58次连续n=1349535,连续值个数: 2;耗时: 1854ms,总计: 2402ms
    59次连续n=1357203,连续值个数: 7;耗时: 22ms,总计: 2424ms
    60次连续n=1357203,连续值个数: 7;耗时: 22ms,总计: 2424ms
    61次连续n=1357203,连续值个数: 7;耗时: 22ms,总计: 2424ms
    62次连续n=1357203,连续值个数: 7;耗时: 22ms,总计: 2424ms
    63次连续n=1357203,连续值个数: 7;耗时: 22ms,总计: 2424ms
    64次连续n=1357203,连续值个数: 7;耗时: 22ms,总计: 2424ms
    65次连续n=1357203,连续值个数: 7;耗时: 22ms,总计: 2424ms
    66次连续n=2010735,连续值个数: 8;耗时: 1889ms,总计: 4313ms
    67次连续n=2010735,连续值个数: 8;耗时: 1889ms,总计: 4313ms
    68次连续n=2010735,连续值个数: 8;耗时: 1889ms,总计: 4313ms
    69次连续n=2010735,连续值个数: 8;耗时: 1889ms,总计: 4313ms
    70次连续n=2010735,连续值个数: 8;耗时: 1889ms,总计: 4313ms
    71次连续n=2010735,连续值个数: 8;耗时: 1889ms,总计: 4313ms
    72次连续n=2010735,连续值个数: 8;耗时: 1889ms,总计: 4313ms
    73次连续n=2010735,连续值个数: 8;耗时: 1890ms,总计: 4314ms
    74次连续n=4652355,连续值个数: 3;耗时: 10583ms,总计: 14897ms
    75次连续n=4652355,连续值个数: 3;耗时: 10583ms,总计: 14897ms
    76次连续n=4652355,连续值个数: 3;耗时: 10583ms,总计: 14897ms
    77次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    78次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    79次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    80次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    81次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    82次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    83次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    84次连续n=17051709,连续值个数: 13;耗时: 86082ms,总计: 100979ms
    85次连续n=17051709,连续值个数: 13;耗时: 86083ms,总计: 100980ms
    86次连续n=17051709,连续值个数: 13;耗时: 86083ms,总计: 100980ms
    87次连续n=17051709,连续值个数: 13;耗时: 86083ms,总计: 100980ms
    88次连续n=17051709,连续值个数: 13;耗时: 86083ms,总计: 100980ms
    89次连续n=17051709,连续值个数: 13;耗时: 86083ms,总计: 100980ms
    90次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    91次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    92次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    93次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    94次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    95次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    96次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    97次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    98次连续n=20831325,连续值个数: 15;耗时: 34772ms,总计: 135752ms
    99次连续n=20831325,连续值个数: 15;耗时: 34773ms,总计: 135753ms
    100次连续n=20831325,连续值个数: 15;耗时: 34773ms,总计: 135753ms
    101次连续n=20831325,连续值个数: 15;耗时: 34773ms,总计: 135753ms
    102次连续n=20831325,连续值个数: 15;耗时: 34773ms,总计: 135753ms
    103次连续n=20831325,连续值个数: 15;耗时: 34773ms,总计: 135753ms
    104次连续n=20831325,连续值个数: 15;耗时: 34773ms,总计: 135753ms
    105次连续n=47326695,连续值个数: 5;耗时: 319130ms,总计: 452155ms
    106次连续n=47326695,连续值个数: 5;耗时: 319131ms,总计: 452156ms
    107次连续n=47326695,连续值个数: 5;耗时: 319131ms,总计: 452156ms
    108次连续n=47326695,连续值个数: 5;耗时: 319131ms,总计: 452156ms
    109次连续n=47326695,连续值个数: 5;耗时: 319131ms,总计: 452156ms
    110次连续n=122164749,连续值个数: 1;耗时: 1395200ms,总计: 1847356ms
    111次连续n=189695661,连续值个数: 6;耗时: 1705936ms,总计: 3553292ms
    112次连续n=189695661,连续值个数: 6;耗时: 1705936ms,总计: 3553292ms
    113次连续n=189695661,连续值个数: 6;耗时: 1705936ms,总计: 3553292ms
    114次连续n=189695661,连续值个数: 6;耗时: 1705936ms,总计: 3553292ms
    115次连续n=189695661,连续值个数: 6;耗时: 1705936ms,总计: 3553292ms
    116次连续n=189695661,连续值个数: 6;耗时: 1705936ms,总计: 3553292ms
    117次连续n=191912785,连续值个数: 7;耗时: 61964ms,总计: 3615256ms
    118次连续n=191912785,连续值个数: 7;耗时: 61964ms,总计: 3615256ms
    119次连续n=191912785,连续值个数: 7;耗时: 61964ms,总计: 3615256ms
    120次连续n=191912785,连续值个数: 7;耗时: 61964ms,总计: 3615256ms
    121次连续n=191912785,连续值个数: 7;耗时: 61964ms,总计: 3615256ms
    122次连续n=191912785,连续值个数: 7;耗时: 61964ms,总计: 3615256ms
    123次连续n=191912785,连续值个数: 7;耗时: 61964ms,总计: 3615256ms
    124次连续n=387096135,连续值个数: 1;耗时: 6650201ms,总计: 10265457ms
    125次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    126次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    127次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    128次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    129次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    130次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    131次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    132次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    133次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    134次连续n=436273011,连续值个数: 16;耗时: 1999567ms,总计: 12265024ms
    135次连续n=436273011,连续值个数: 16;耗时: 1999568ms,总计: 12265025ms
    136次连续n=436273011,连续值个数: 16;耗时: 1999568ms,总计: 12265025ms
    137次连续n=436273011,连续值个数: 16;耗时: 1999568ms,总计: 12265025ms
    138次连续n=436273011,连续值个数: 16;耗时: 1999568ms,总计: 12265025ms
    139次连续n=436273011,连续值个数: 16;耗时: 1999568ms,总计: 12265025ms
    140次连续n=436273011,连续值个数: 16;耗时: 1999568ms,总计: 12265025ms
    141次连续n=1294268493,连续值个数: 3;耗时: 49257124ms,总计: 61522149ms
    142次连续n=1294268493,连续值个数: 3;耗时: 49257124ms,总计: 61522149ms
    143次连续n=1294268493,连续值个数: 3;耗时: 49257124ms,总计: 61522149ms
    144次连续n=1453168143,连续值个数: 2;耗时: 11962769ms,总计: 73484918ms
    145次连续n=1453168143,连续值个数: 2;耗时: 11962769ms,总计: 73484918ms
    
    .....
    ----- 
    本次已经跑完了,下一个值超出了1000次;无用耗时: 0ms,总计: xxxxxx135395ms
    

    。。。。。 后面的结果还没算出来,相比看到这里你就发现多线程的优点了。。

    。 单线程在4核心的CPU上也仅仅有25%的利用率。



    代码例如以下所看到的:

    package com.test.test.zhihe;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 连续6个奇数a,a+2,a+4,a+6,a+8,a+10都是合数,求最小的a
     * @author http://blog.csdn.net/renfufei
     */
    public class ZhishuTest {
    	/**
    	 * 推断某个数是否是合数. 相较于质数
    	 * @param num
    	 * @return
    	 */
    	public static boolean He(int num){
    		// 平方根
    		int sq = ((Double)Math.sqrt(num)).intValue();
    		// 2 ...... sq
    		for (int i = 2; i <= sq; i++) {
    			int mo = num % i;
    			if(0 == mo){
    				return true;
    			}
    		}
    		//
    		return false;
    	}
    
    	/**
    	 * 主函数
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		test();
    	}
    	public static void test() {
    		// 開始时间
    		long startMillis = System.currentTimeMillis();
    		// 上次完毕时间
    		long preMillis = System.currentTimeMillis();
    		// 本次完毕时间
    		long curMillis = System.currentTimeMillis();
    		//
    		int lianxu = 1000;
    		int start = 1;
    		int times = 1;
    		for (int x = 1; x <= lianxu; x++) {
    			if(times > x){
    				continue;// 跳过,进入下一次循环
    			} else {
    				times = x;
    			}
    			List<Map<Integer, Integer>> resList = testTimesHe(x, start, false);
    			//
    			// 假设有数字,则进行处理
    			if(null == resList || resList.isEmpty()){
    				// 找不到。就不会再有下一个了...
    				// 深层嵌套太恶心了。。

    。 break; } int size = resList.size(); // 遍历 Iterator<Map<Integer, Integer>> iteratorR = resList.iterator(); while (iteratorR.hasNext()) { Map<Integer, Integer> map = (Map<Integer, Integer>) iteratorR.next(); // if(null != map && !map.isEmpty()){ // Map遍历太恶心了.烂Java Set<Integer> keys= map.keySet(); Iterator<Integer> iteratorK = keys.iterator(); if(iteratorK.hasNext()){ Integer key = iteratorK.next(); // 次数 Integer value = map.get(key); // 最小n // // 本次完毕时间 curMillis = System.currentTimeMillis(); // long allTimeout = curMillis - startMillis; long curTimeout = curMillis - preMillis; System.out.println(""+key+"次连续n="+value +",连续值个数: "+size + ";耗时: " + curTimeout + "ms,总计: "+allTimeout+"ms"); // 处理数据,贪婪处理过的就不处理了 if(key > 0 && value > 0){ times = key+1; start = value; } } } } // 计入上次完毕时间 preMillis = System.currentTimeMillis(); } // // 本次完毕时间 curMillis = System.currentTimeMillis(); // long allTimeout = curMillis - startMillis; long curTimeout = curMillis - preMillis; System.out.println("本次已经跑完了,下一个值超出了100次 " + ";无用耗时: " + curTimeout + "ms,总计: "+allTimeout+"ms"); } /** * * 測试 times 次的+2都是合数的最小n * @param times 计算次数 * @param start 起始数字 * @param onlyStart 仅仅计算单个start值.用于递归.外部调用应该传入 * @return */ public static List<Map<Integer, Integer>> testTimesHe(int times,int start, boolean onlyStart) { // List<Map<Integer, Integer>> resList= new ArrayList<Map<Integer, Integer>>(); // // 防御式编程 if(start < 1){ return resList; } if(0 == start % 2){ // 不处理偶数 return resList; } if(times < 1){ times = 1; } // int result = -1; // for (int i = start; i < Integer.MAX_VALUE; i+=2) { // // 避免一直计算不返回 if(onlyStart && i > start){ // start 不满足,就直接 return resList; } for (int j = 0; j < times; j++) { int n = i + 2*j; // if(!He(n)){ break;// 内层退出 } // if(j+1 == times){ // 跑到结果了. times 次都满足 result = i; break;// 这里退不退无所谓,跑到for的最后了 } } // if(result > 0){ // //System.out.println("result = "+result); // Map<Integer, Integer> resMap = new HashMap<Integer, Integer>(); resMap.put(times, result); resList.add(resMap); // 尝试下一个次数,递归; 事实上这个递归还能够继续优化一点; 贪婪算法,直接加下一次。。。 // startTimes, 直接加这个參数。

    。。贪婪递归? // 多1次,从result这个数開始 int t = times +1; int s = result; List<Map<Integer, Integer>> nextList = testTimesHe(t, s, true); // 假设有下一层的数字,则增加到当前结果 if(null != nextList && false==nextList.isEmpty()){ resList.addAll(nextList); } // break;// 外层退出 } } // return resList; } }



    说明: 有改进的余地,欢迎您到下一次修正

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    laravel使用redis报错
    PHP新特性W3Cschool
    【python】跳过验证直接登陆-cookie已经知道需要部分直接注入
    【python】显示等待
    【python】pymysql库的简单使用
    【python】UI自动化优化浏览器重复打开和跑脚本时电脑无法做其他工作的问题
    【python】seleniumwire和selenium的区别
    【python】UI自动化-新版
    【python】UI自动化获取输入框的值
    【python】UI自动化多窗口处理
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4818742.html
Copyright © 2011-2022 走看看