PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/09/07 00:50:12
Name EZrock
Subject 프로그래머를 모으는 질문 - 3 -
그럭저럭 어제 프로그램을 완성시켰으나 n²의 시간복잡도로는 int Max_Value 까지의 최대소수 구하는데는 정말 애로사항이 꽃폈습니다.

그래서 이번엔 정수를 입력받으면 그 정수부터 2까지 가며 소수하나 찾는걸로 바꿀려고 합니다.

n->2까지 가는데 소수찾으면 그게 결국은 최대소수니까요...


근데 이게 왠일인지...수십번을 고쳐도 원하는 값이 결코 나오지 않습니다.

이중루프를 쓰니까 같은 조건문을 안팍으로 쓰지 않는한은 방법이 없었습니다.

예를 들면

for(i = Number; i>=2; i--){
       for(j = Number/2; j>=2; j--){
               if(i%j==0) break; // 이 부분에서 바로 1차 루프까지 빠져 나오면 좋을텐데
       }
       MaxPrimeNun = i; // 물론 이 부분은 실질적으로 있으나 마나한 문구입니다. 위의 break;가 여기까지 넘어주면 좋지만 그건 안되니까요...
}

이것 외에도 괴상망측한 4~5가지를 생각해 냈지만 모두 실현되지 않았습니다.

어떻게 해야 할지 아이디어는 잡히는데 방법이 안보이는군요. 도움 부탁드립니다 ㅠㅠ
      

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/09/07 01:06
수정 아이콘
for(i = Number; i>=2; i--)

for(j = 2; j<=Number/2; j++){
if(i%j==0) break;

if(j == Number/2){
MaxPrimeNum = i;
break;

}
if(MaxPrimeNum !=0) break;
}

어줍잖게나마 완성했습니다만...전혀 깔끔하지 못합니다. 여기저기 break나 걸고 있으니...게다가 Int MAX_VALUE로 돌릴시에 꽤 많은 시간이 걸립니다.(약 17초 정도)

조금 더 좋은 개선방법 있거나 시간 단축을 줄일 수 있는 방법이 있으시면 많은 가르침 바라겠습니다.
꿀호떡a
08/09/07 01:14
수정 아이콘
bool is_prime(int a)

__int64 j;
for(j=2; j*j<=a;j++) if(a%j==0) return false;
return true;

int max_prime(int Num)

int i;
for(i=Num;i>=1;i--) if(is_prime(i)) return i;
return -1;


시간복잡도 O(N^1.5) 정도 될겁니다.
기본적인 아이디어는, 어떤 수 k가 소수인지 아닌지를 판별하는 데에는 2~[root(k)] 까지만 확인해보면 된다는 겁니다. 이 부분만 바꿔주셔도 시간은 무지막지하게 개선될 것으로 보입니다.
08/09/07 01:50
수정 아이콘
글쓴이께 궁금한점이 있습니다. 질게에서 최근 3일내에 같은 문제를 놓고 질문하신것으로 나오네요.
이 글들에는 친절하신분들이 댓글을 남겨 놓으셨구요. 그중에는 실제 소스를 올린분도 계십니다. 궁금해하시는 소수구하는 알고리즘의 최적화 버전에대해서 간단히 말씀하시기도 했구요.
그럼에도 불구하고 다시 질문을 올리시는 이유가 궁금합니다. 별다른 문제도 없이 말입니다. 이전의 글에 달린 댓글로도 충분히 많은것을 얻을수 있지 않았나요? 만약 스스로 해답을 찾기 원했다면, 다시 글을 올릴 이유가 없을 텐데요...
질문을 하시기 전에 이전 질문에 있던 댓글을 읽어보신것은 확실한가요?
08/09/07 02:19
수정 아이콘
아이디어는 괜찮은데 제가 만든 프로그램에 맞게 고쳐서 돌려보니까 뭔가 맞지 않네요 음...;;
08/09/07 02:33
수정 아이콘
tsana님// 말씀하시려는 뜻 잘 알겠습니다.

다만 중간중간 바꿔가는 과정에서 막히기 때문에 막히는 부분을 중점으로 질문 드렸던 것입니다.

제일 첫번째 문제는 제가 기존에 알고 있던 상식인 소수찾는데 n² 시간복잡도보다 줄이는 질문이고 두번째는 소스의 문제였고 세번쨰는 원래의 문제점을 거꾸로 돌려 찾다보니까 소스가 기이해져서 그것을 어느정도 깔끔하게 정리하고자 하여 질문 드린 것입니다.[공교롭게도 시간이 좀 많이 나온감이 있어서 그것에 대한 보강 질문을 했는데 첫번째 글에 있던 리플과 같은 답이 주어졌습니다. 지금보니까 어떤 원린지 이해가 되니 이건 제가 다시 꼼꼼히 살펴보지 못한 탓입니다.]

사실 알고리즘을 잡는게 많이 약한데다가 한동안 공부를 안해서 감이 떨어져 있기 때문에 어떻게든 할 수 있는 부분까지 해보고 그 이상 힘들것 같으면 이곳을 들려서 많은 분의 도움을 받을려하고 있습니다.
와후-만세
08/09/07 13:25
수정 아이콘
시간복잡도 O(N log log N) 가능합니다. (예,예 꽤빠르죠)
에라토스테네스의 체가 해법입니다. ^^;
와후-만세
08/09/07 13:28
수정 아이콘
for (i=2;i<=N;i+=1)

if(pchk[i] == 0){/* 이 조건을 만족하면 i는 소수입니다. */
for(j = i*i; j<= N; j+=i){
pchk[j] = 1;

}
}

시간복잡도는 거의 선형시간이나 마찬가지입니다. 더 자세한 정보가 필요하시면 추가질문해주세요.
꿀호떡a
08/09/07 13:44
수정 아이콘
와후-만세님// 역시 역관광 ㅠ.ㅠ;;
와후-만세
08/09/07 13:45
수정 아이콘
꿀호떡a님// 노노노, 질문자님의 기본 컨셉을 따라가면서 개선을 하는 방법이 더 멋져요. 꿀호떡a님의 답변이 질문자님의 성향에 잘 맞는 답인 듯 싶네요. ^^;
와후-만세
08/09/07 13:48
수정 아이콘
참고로 에라토스테네스의 체는 암호론 쪽이나 수학에 적용할 때를 제외하고는,
실용적인 측면에서는 상당히 유용합니다. 참고로 리만의 가설이 맞다는 전제 하에, Miller-Rabin Primality Test를 이용하시면
평균 O((log N)^5) 에 해결가능한 문제입니다.(큰 수부터 거꾸로 검사해주면 평균적으로 log N만에 소수를 찾을 수 있고, 테스트에 (log N)^4이 소요됩니다) sublinear time이고, 큰 소수(512비트라거나...)가 필요할 때 상당히 유용합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
41787 컴퓨터 소음이요.. [3] 너에게간다1992 08/09/07 1992
41786 드라마를 다운 받았는데요 worcs1644 08/09/07 1644
41785 파일구리 핵 어떻게 쓰는 건가요.. [9] TOR[RES]3431 08/09/07 3431
41783 9월 10일에 지구가 멸망할지도 모르는 실험을 한다던데.. [18] 바카스2461 08/09/07 2461
41782 인터넷 창이 그냥 꺼져버리는 현상.. TOR[RES]2310 08/09/07 2310
41780 advloader 창모드로 하면 한글이 깨져서 나오네요 [3] 이성은이망극2939 08/09/07 2939
41779 노래 가사 해석 부탁드립니다.. [2] inkin1951 08/09/07 1951
41778 PSP 이니셜 D 질문입니다. [2] Zakk Wylde2586 08/09/07 2586
41777 팝송 mp3파일 저작권에 관한 질문입니다. skyk1999 08/09/07 1999
41775 프로그래머를 모으는 질문 - 3 - [10] EZrock1543 08/09/07 1543
41774 여자친구랑 헤어졌습니다. [11] 백소2642 08/09/07 2642
41773 게임 타이틀 질문입니다 [4] 달빛요정굳히1791 08/09/07 1791
41772 물리학 질문 하나 하겠습니다. [1] 라울리스타1686 08/09/07 1686
41771 엠겜 워3리그 VOD 다 삭제되었나요? CoolLuck1800 08/09/06 1800
41770 We Are The World 란 노래에 대한 질문입니다 [5] TOR[RES]1685 08/09/06 1685
41769 조기 축구회에 가입할려고 하는데요.. [1] funnyday2089 08/09/06 2089
41767 잘못배달온 택배.. 쿨럭. 어찌해야 하나요? [11] 율리우스 카이2791 08/09/06 2791
41766 춘사대상영화제 신인의 기준은? 허접플토1697 08/09/06 1697
41765 mp3 질문 올립니다! [4] 박서의콧털1957 08/09/06 1957
41764 최근 개봉영화 추천 부탁드립니다. 신기전 어떤가요? [3] Liberal1909 08/09/06 1909
41763 데니스 강 본명이 뭔가요? [3] 포셀라나2202 08/09/06 2202
41761 유료 P2P 추천부탁합니다. [16] 욕교반졸6533 08/09/06 6533
41760 버스환승이요 [8] 올빼미1899 08/09/06 1899
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로