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, 총계: 1ms12회 연속 n=1329, 연속 값 개수: 6; 소모 시간: 0ms, 총계: 1ms 13회 연속 n=1329, 연속 값 수: 6, 시간 소모: 0ms, 총계: 1ms 14회 연속 n=1329, 연속 값 수: 6, 시간 소모: 0ms, 총: 1ms 15회 연속 n= 1329, 연속 값 수: 6; 시간 소모: 0ms, 총계: 1ms 연속 횟수 n=1329, 연속 값 수: 6; 0ms, 총: 1ms, 17회 연속 n=9553, 연속 값 수: 1; 시간 소모: 2ms, 총: 3ms, 18회 연속 n=15685, 연속 값 수: 4; 5ms, 19회 연속 n =15685, 연속 값 수: 4, 시간 소비: 1ms, 총: 5ms20회 연속 n=15685, 연속 값 수: 4; 시간 소모: 1ms, 총: 5ms, 21번 연속 n=15685, 연속 값 수: 4; 시간 소모: 1ms, 총: 5ms, 22번 연속 n=19611, 연속 값 수: 4; : 2ms, 총 : 8ms23회 연속 n=19611, 연속 값 수: 4 시간 소모: 2ms, 총: 8ms24 연속 횟수 n=19611, 연속 값 수: 4; 시간 소비: 2ms, 총: 8ms25 연속 횟수 n=19611, 연속 값 수: 4; 시간 소비: 2ms, 총 횟수: 8ms26 연속 횟수 n=31399, 연속 값 수: 10, 시간 소모: 5ms, 총: 13ms, 27회 연속 n=31399, 연속 값 수: 10; 시간 소모: 5ms, 총: 13ms, 28번 연속 n=31399, 연속 값 수: 10; 시간 소모: 5ms, 총: 13ms, 29번 연속 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, 총: 363ms 연속 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, 연속 값 수: 86082ms, 총 수: 100979ms78회 연속 n=17051709, 연속 값 수: 13, 시간 소모: 86082ms, 총: 100979ms79회 연속 n=17051709, 연속 값 수: 13, 시간 소모: 86082ms, 총: 100979ms80회 연속 n=17051709, 연속 값 개수: 13; 시간 소모: 86082ms, 총: 100979ms81회 연속 n=17051709, 연속 값 수: 13; 시간 소모: 86082ms, 총: 100979ms 82회 연속 n=17051709, 연속 값 수: 13; : 100979ms83번 연속 n=17051709, 연속 값 개수: 13, 시간 소모: 86082ms, 총: 100979ms84번 연속 n=17051709, 연속 값 개수: 13, 시간 소모: 86082ms, 총: 100979ms85번 연속 n=17051709, 연속 값 개수: 13; 시간 소모: 86083ms, 총: 100980ms 86회 연속 n=17051709, 연속 값 수: 13; 소모 시간: 86083ms, 총: 100980ms 87회 연속 n=17051709, 연속 값 수: 13; , 총 : 100980ms88회 연속 n=17051709, 연속 값 수: 13, 시간 소모: 86083ms, 총: 100980ms89회 연속 n=17051709, 연속 값 수: 13, 시간 소모: 86083ms, 총 횟수: 100980ms90회 연속 n=20831325, 연속된 값 수: 15; 시간 소모: 34772ms, 총: 135752ms91회 연속 n=20831325, 연속 값 수: 15, 시간 소모: 34772ms, 총: 135752ms92회 연속 n=20831325, 연속 값 수: 15; : 135752ms93 연속 횟수 n=20831325, 연속 값 수: 15, 시간 소모: 34772ms, 총: 135752ms94 연속 횟수 n=20831325, 연속 값 수: 15, 시간 소모: 34772ms, 총 횟수: 135752ms95 연속 n=20831325, 연속된 값 수: 15; 시간 소모: 34772ms, 총: 135752ms96회 연속 n=20831325, 연속 값 수: 15, 시간 소모: 34772ms, 총: 135752ms97회 연속 n=20831325, 연속 값 수: 15; : 135752ms98회 연속 n=20831325, 연속 값 수: 15, 시간 소모: 34772ms, 총: 135752ms99회 연속 n=20831325, 연속 값 수: 15, 시간 소모: 34773ms, 총 횟수: 135753ms100회 연속 n=20831325, 연속된 값 수: 15; 소요 시간: 34773ms, 총: 135753ms101회 연속 n=20831325, 연속 값 수: 15; 소요 시간: 34773ms, 총: 135753ms 연속 n=20831325, 연속 값 수: 15; : 135753ms103번 연속 n=20831325, 연속 값 개수: 15, 시간 소모: 34773ms, 총: 135753ms104번 연속 n=20831325, 연속 값 개수: 15, 총 시간 소모: 34773ms 135753ms105회 연속 n=47326695, 연속 값 수: 5, 시간 소비: 319130ms, 총: 452155ms106회 연속 n=47326695, 연속 값 수: 5, 총 시간: 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, 총 시간 소모: 3553292ms113회 연속 n=189695661, 연속 값 수: 6, 시간 소모: 1705936ms, 총: 3553292ms114회 연속 n=189695661, 연속 값 수: 6, 총 시간 소모: 3553292ms115회 연속 n=189695661, 연속 값 수: 6, 시간 소모: 1705936ms, 총: 3553292ms116회 연속 n=189695661, 연속 값 수: 6, 총 시간 소모: 3553292ms117회 연속 n=191912785, 연속 값 수: 7; 시간 소모: 61964ms, 총: 3615256ms118회 연속 n=191912785, 연속 값 수: 7; 3615256ms119회 연속 n=191912785, 연속 값 수: 7, 시간 소비: 61964ms, 총: 3615256ms120회 연속 n=191912785, 연속 값 수: 7, 총: 3615256ms121회 연속 n=191912785, 연속 값 수: 7; 시간 소모: 61964ms, 총: 3615256ms122회 연속 n=191912785, 연속 값 수: 7; 3615256ms123회 연속 n=191912785, 연속 값 수: 7, 시간 소비: 61964ms, 총: 3615256ms124회 연속 n=387096135, 연속 값 수: 1, 총 시간 소비: 10265457ms--- 이 실행이 완료되었으며 다음 값이 1000회를 초과했습니다. 쓸모 없는 시간: 0ms, 총계: xxxxxx135395ms
. . . . . . 후속 결과는 아직 계산되지 않았습니다.
코드는 다음과 같습니다:
패키지 com.test.test.zhihe;가져오기 java.util.ArrayList;가져오기 java.util.HashMap;가져오기 java.util.Iterator;가져오기 java.util.List;가져오기 java.util.Map;가져오기 java.util.Set ;/** * 연속된 6개의 홀수 a, a+2, a+4, a+6, a+8, a+10은 모두 합성수입니다. 가장 작은 a를 찾습니다 */public 클래스 ZhishuTest { /** * 숫자가 합성수인지 확인합니다. 소수와 비교* @param num * @return */ public static boolean He(int num){ // Square root 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() } test() { // 시작 시간 long startMillis = System.currentTimeMillis(); // 마지막 완료 시간 long preMillis = System.currentTimeMillis() // 이번 완료 시간 long curMillis = System.currentTimeMillis(); // int lianxu = 1; int times = 1 for (int x = 1; x <= lianxu; x++) { if(times > x){ // 점프 통과하면 다음 루프에 진입합니다.} 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()){ // 맵 순회가 너무 역겹습니다. Java Set<Integer> key= map.keySet(); Iterator<Integer> iteratorK = key.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, total: "+allTimeout+"ms"); // 데이터 처리, 많이 처리된 데이터는 처리하지 않음 if(key > 0 && value > 0){ times = key+1; start = value; } } } } // 마지막 완료 시간 포함 preMillis = System.currentTimeMillis(); } // // 이 완료 시간 curMillis = System.currentTimeMillis(); // long allTimeout = curMillis - startMillis; long curTimeout - preMillis; out.println("이 실행이 완료되었습니다. 다음 값이 100회를 초과했습니다." + "; 쓸모 없는 시간: " + curTimeout + "ms, 총계: "+allTimeout+"ms"); } /** * * 테스트 시간 + 2는 합성수의 최소 n개입니다. * @param 시간 계산 시간 * @param 시작 시작 번호 * @param onlyStart는 단일 시작 값만 계산합니다. 외부 호출은 * @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){ // 시작이 만족되지 않으면 직접 resList를 반환합니다. } for (int j = 0; j < times; j++) { int n = i + 2*j; // if(!He(n)){ break; // 내부 종료} // if(j+1 == 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, 이 매개변수를 직접 추가합니다. . . 탐욕스러운 재귀? // 숫자부터 시작하여 한 번 더 result int t = times +1; int s = result; List<Map<Integer, Integer>> nextList = testTimesHe(t, s, true); is 다음 레벨의 숫자가 현재 결과에 추가됩니다. if(null != nextList && false==nextList.isEmpty()){ resList.addAll(nextList) } // break; // 외부 레이어 종료 } } // resList 반환 }}
참고: 아직 개선의 여지가 있으므로 다음에 수정해 주시기 바랍니다.