连续x次奇数(n+2*x)是合数的算法题暴力算法

简介: // 连续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...

// 连续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;
	}
}


说明: 还有改进空间,欢迎下次修正

目录
相关文章
|
前端开发 算法 JavaScript
LeetCode生成每种字符都是奇数个的字符串使用JavaScript解题|前端学算法
LeetCode生成每种字符都是奇数个的字符串使用JavaScript解题|前端学算法
74 0
LeetCode生成每种字符都是奇数个的字符串使用JavaScript解题|前端学算法
|
算法 C语言
【算法与数据结构】奇数阶魔方阵
【算法与数据结构】奇数阶魔方阵
170 0
|
Rust 算法 安全
【算法学习】1588. 所有奇数长度子数组的和(java / c / c++ / python / go / rust)
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。 子数组 定义为原数组中的一个连续子序列。 请你返回 arr 中 所有奇数长度子数组的和 。
【算法学习】1588. 所有奇数长度子数组的和(java / c / c++ / python / go / rust)
|
算法 C语言
空瓶换水喝水问题?给一个数组,如何让奇数在前偶数在后?C语言从入门到入土(进阶篇)(算法篇p5)
题一:喝水问题,一块钱可以换1瓶水,2个空瓶可以换1瓶水,给你对应的钱数求能喝的水数:
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
1天前
|
算法
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
MATLAB 2022a仿真实现了LDPC码的性能分析,展示了不同码长对纠错能力的影响。短码长LDPC码收敛快但纠错能力有限,长码长则提供更强纠错能力但易陷入局部最优。核心代码通过循环进行误码率仿真,根据EsN0计算误比特率,并保存不同码长(12-768)的结果数据。
19 9
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
|
2天前
|
算法
MATLAB|【免费】融合正余弦和柯西变异的麻雀优化算法SCSSA-CNN-BiLSTM双向长短期记忆网络预测模型
这段内容介绍了一个使用改进的麻雀搜索算法优化CNN-BiLSTM模型进行多输入单输出预测的程序。程序通过融合正余弦和柯西变异提升算法性能,主要优化学习率、正则化参数及BiLSTM的隐层神经元数量。它利用一段简单的风速数据进行演示,对比了改进算法与粒子群、灰狼算法的优化效果。代码包括数据导入、预处理和模型构建部分,并展示了优化前后的效果。建议使用高版本MATLAB运行。
|
4天前
|
算法 计算机视觉
基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真
该内容是关于使用MATLAB2013B实现基于高斯混合模型(GMM)的视频背景提取和人员跟踪算法。算法通过GMM建立背景模型,新帧与模型比较,提取前景并进行人员跟踪。文章附有程序代码示例,展示从读取视频到结果显示的流程。最后,结果保存在Result.mat文件中。
|
4天前
|
资源调度 算法 块存储
m基于遗传优化的LDPC码OMS译码算法最优偏移参数计算和误码率matlab仿真
MATLAB2022a仿真实现了遗传优化的LDPC码OSD译码算法,通过自动搜索最佳偏移参数ΔΔ以提升纠错性能。该算法结合了低密度奇偶校验码和有序统计译码理论,利用遗传算法进行全局优化,避免手动调整,提高译码效率。核心程序包括编码、调制、AWGN信道模拟及软输入软输出译码等步骤,通过仿真曲线展示了不同SNR下的误码率性能。
9 1