連續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 ----- 本次已經跑完了,下一個值超出了1000次;無用耗時: 0ms,總計: xxxxxx135395ms
。。。。。。 後面的結果還沒算出來
代碼如下所示:
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 */ 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; } }
說明: 還有改進空間,歡迎下次修正