Java實現的連續奇數(n+2*x)是合數的演算法題暴力演算法_java

來源:互聯網
上載者:User

連續6個奇數a,a+2,a+4,a+6,a+8,a+10都是合數,求最小的a的暴力解法。

先上結果,後面貼上代碼:

1次連續n=9,連續值個數: 1;耗時: 0ms,總計: 0ms2次連續n=25,連續值個數: 1;耗時: 0ms,總計: 0ms3次連續n=91,連續值個數: 1;耗時: 0ms,總計: 0ms4次連續n=115,連續值個數: 3;耗時: 0ms,總計: 1ms5次連續n=115,連續值個數: 3;耗時: 0ms,總計: 1ms6次連續n=115,連續值個數: 3;耗時: 0ms,總計: 1ms7次連續n=525,連續值個數: 2;耗時: 0ms,總計: 1ms8次連續n=525,連續值個數: 2;耗時: 0ms,總計: 1ms9次連續n=889,連續值個數: 1;耗時: 0ms,總計: 1ms10次連續n=1131,連續值個數: 1;耗時: 0ms,總計: 1ms11次連續n=1329,連續值個數: 6;耗時: 0ms,總計: 1ms12次連續n=1329,連續值個數: 6;耗時: 0ms,總計: 1ms13次連續n=1329,連續值個數: 6;耗時: 0ms,總計: 1ms14次連續n=1329,連續值個數: 6;耗時: 0ms,總計: 1ms15次連續n=1329,連續值個數: 6;耗時: 0ms,總計: 1ms16次連續n=1329,連續值個數: 6;耗時: 0ms,總計: 1ms17次連續n=9553,連續值個數: 1;耗時: 2ms,總計: 3ms18次連續n=15685,連續值個數: 4;耗時: 1ms,總計: 5ms19次連續n=15685,連續值個數: 4;耗時: 1ms,總計: 5ms20次連續n=15685,連續值個數: 4;耗時: 1ms,總計: 5ms21次連續n=15685,連續值個數: 4;耗時: 1ms,總計: 5ms22次連續n=19611,連續值個數: 4;耗時: 2ms,總計: 8ms23次連續n=19611,連續值個數: 4;耗時: 2ms,總計: 8ms24次連續n=19611,連續值個數: 4;耗時: 2ms,總計: 8ms25次連續n=19611,連續值個數: 4;耗時: 2ms,總計: 8ms26次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms27次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms28次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms29次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms30次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms31次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms32次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms33次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms34次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms35次連續n=31399,連續值個數: 10;耗時: 5ms,總計: 13ms36次連續n=155923,連續值個數: 7;耗時: 92ms,總計: 105ms37次連續n=155923,連續值個數: 7;耗時: 92ms,總計: 105ms38次連續n=155923,連續值個數: 7;耗時: 92ms,總計: 105ms39次連續n=155923,連續值個數: 7;耗時: 92ms,總計: 105ms40次連續n=155923,連續值個數: 7;耗時: 92ms,總計: 105ms41次連續n=155923,連續值個數: 7;耗時: 92ms,總計: 105ms42次連續n=155923,連續值個數: 7;耗時: 93ms,總計: 106ms43次連續n=360655,連續值個數: 5;耗時: 243ms,總計: 349ms44次連續n=360655,連續值個數: 5;耗時: 243ms,總計: 349ms45次連續n=360655,連續值個數: 5;耗時: 243ms,總計: 349ms46次連續n=360655,連續值個數: 5;耗時: 243ms,總計: 349ms47次連續n=360655,連續值個數: 5;耗時: 243ms,總計: 349ms48次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms49次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms50次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms51次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms52次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms53次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms54次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms55次連續n=370263,連續值個數: 8;耗時: 14ms,總計: 363ms56次連續n=492115,連續值個數: 1;耗時: 185ms,總計: 548ms57次連續n=1349535,連續值個數: 2;耗時: 1854ms,總計: 2402ms58次連續n=1349535,連續值個數: 2;耗時: 1854ms,總計: 2402ms59次連續n=1357203,連續值個數: 7;耗時: 22ms,總計: 2424ms60次連續n=1357203,連續值個數: 7;耗時: 22ms,總計: 2424ms61次連續n=1357203,連續值個數: 7;耗時: 22ms,總計: 2424ms62次連續n=1357203,連續值個數: 7;耗時: 22ms,總計: 2424ms63次連續n=1357203,連續值個數: 7;耗時: 22ms,總計: 2424ms64次連續n=1357203,連續值個數: 7;耗時: 22ms,總計: 2424ms65次連續n=1357203,連續值個數: 7;耗時: 22ms,總計: 2424ms66次連續n=2010735,連續值個數: 8;耗時: 1889ms,總計: 4313ms67次連續n=2010735,連續值個數: 8;耗時: 1889ms,總計: 4313ms68次連續n=2010735,連續值個數: 8;耗時: 1889ms,總計: 4313ms69次連續n=2010735,連續值個數: 8;耗時: 1889ms,總計: 4313ms70次連續n=2010735,連續值個數: 8;耗時: 1889ms,總計: 4313ms71次連續n=2010735,連續值個數: 8;耗時: 1889ms,總計: 4313ms72次連續n=2010735,連續值個數: 8;耗時: 1889ms,總計: 4313ms73次連續n=2010735,連續值個數: 8;耗時: 1890ms,總計: 4314ms74次連續n=4652355,連續值個數: 3;耗時: 10583ms,總計: 14897ms75次連續n=4652355,連續值個數: 3;耗時: 10583ms,總計: 14897ms76次連續n=4652355,連續值個數: 3;耗時: 10583ms,總計: 14897ms77次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms78次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms79次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms80次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms81次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms82次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms83次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms84次連續n=17051709,連續值個數: 13;耗時: 86082ms,總計: 100979ms85次連續n=17051709,連續值個數: 13;耗時: 86083ms,總計: 100980ms86次連續n=17051709,連續值個數: 13;耗時: 86083ms,總計: 100980ms87次連續n=17051709,連續值個數: 13;耗時: 86083ms,總計: 100980ms88次連續n=17051709,連續值個數: 13;耗時: 86083ms,總計: 100980ms89次連續n=17051709,連續值個數: 13;耗時: 86083ms,總計: 100980ms90次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms91次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms92次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms93次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms94次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms95次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms96次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms97次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms98次連續n=20831325,連續值個數: 15;耗時: 34772ms,總計: 135752ms99次連續n=20831325,連續值個數: 15;耗時: 34773ms,總計: 135753ms100次連續n=20831325,連續值個數: 15;耗時: 34773ms,總計: 135753ms101次連續n=20831325,連續值個數: 15;耗時: 34773ms,總計: 135753ms102次連續n=20831325,連續值個數: 15;耗時: 34773ms,總計: 135753ms103次連續n=20831325,連續值個數: 15;耗時: 34773ms,總計: 135753ms104次連續n=20831325,連續值個數: 15;耗時: 34773ms,總計: 135753ms105次連續n=47326695,連續值個數: 5;耗時: 319130ms,總計: 452155ms106次連續n=47326695,連續值個數: 5;耗時: 319131ms,總計: 452156ms107次連續n=47326695,連續值個數: 5;耗時: 319131ms,總計: 452156ms108次連續n=47326695,連續值個數: 5;耗時: 319131ms,總計: 452156ms109次連續n=47326695,連續值個數: 5;耗時: 319131ms,總計: 452156ms110次連續n=122164749,連續值個數: 1;耗時: 1395200ms,總計: 1847356ms111次連續n=189695661,連續值個數: 6;耗時: 1705936ms,總計: 3553292ms112次連續n=189695661,連續值個數: 6;耗時: 1705936ms,總計: 3553292ms113次連續n=189695661,連續值個數: 6;耗時: 1705936ms,總計: 3553292ms114次連續n=189695661,連續值個數: 6;耗時: 1705936ms,總計: 3553292ms115次連續n=189695661,連續值個數: 6;耗時: 1705936ms,總計: 3553292ms116次連續n=189695661,連續值個數: 6;耗時: 1705936ms,總計: 3553292ms117次連續n=191912785,連續值個數: 7;耗時: 61964ms,總計: 3615256ms118次連續n=191912785,連續值個數: 7;耗時: 61964ms,總計: 3615256ms119次連續n=191912785,連續值個數: 7;耗時: 61964ms,總計: 3615256ms120次連續n=191912785,連續值個數: 7;耗時: 61964ms,總計: 3615256ms121次連續n=191912785,連續值個數: 7;耗時: 61964ms,總計: 3615256ms122次連續n=191912785,連續值個數: 7;耗時: 61964ms,總計: 3615256ms123次連續n=191912785,連續值個數: 7;耗時: 61964ms,總計: 3615256ms124次連續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; }}

說明: 還有改進空間,歡迎下次修正

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.