Java完成的持續奇數(n+2*x)是合數的算法題暴力算法。本站提示廣大學習愛好者:(Java完成的持續奇數(n+2*x)是合數的算法題暴力算法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成的持續奇數(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 ----- 本次曾經跑完了,下一個值超越了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;
}
}
解釋: 還有改良空間,迎接下次修改