멋진 조언 덕분에 문제 해결하였습니다!
감사합니다.
(첨부된 코드는 시간초과되는 코드라 그냥 놔두었습니다.)
안녕하세요. 비밀번호486문제로 매일집중하지는 못했지만, 거의 한달정도 꾸준히 고민하고 있는 알고리즘 초보 입니다.. (어제 인터넷으로 책 구입신청했습니다..)
좀 부족한 코드이지만, 아래 제 코드가 시간초과 안되고 5000 ms 이내로 들어올 가능성이 있을지 의견을 듣고 싶어 글을 올립니다.
고수님들의 조언 부탁드립니다.
감사합니다.
#include <stdio.h>#include <time.h>intTC;intnum,lo,hi;intmemo[10000001];intprime[3163];intprimenb=-1;intcnt,ea,temp,result;intmain(void){time_tst=clock();// find prime num up to sqrt(10,000,000)for(inti=2;i<3163;i++){cnt=0;for(intj=2;j<=i;j++){if(i%j==0)cnt++;if(cnt==2)gotonext1;}if(cnt==1){memo[i]=2;prime[++primenb]=i;}next1:;}memo[1]=1;//scanf("%d",&TC);TC=1;for(inti=0;i<TC;i++){//scanf("%d %d %d",&num,&lo,&hi);num=200;lo=1;hi=10000000;// find divisor numfor(intj=lo;j<=hi;j++){if(memo[j]!=0)continue;temp=j;cnt=1;for(intk=0;k<primenb;k++){ea=1;while(temp%prime[k]==0){temp=temp/prime[k];ea++;}if(ea==1)continue;cnt=cnt*ea;if(temp==1||memo[temp]==2){memo[j]=cnt*memo[temp];gotonext2;}}memo[temp]=2;if(ea==1)memo[j]=cnt*memo[temp];elsememo[j]=cnt;next2:;}for(intj=lo;j<=hi;j++){if(memo[j]==num)result++;}printf("%d\n",result);result=0;}printf("time : %d\n",clock()-st);return0;}
일루 님, kcm1700 님, kriii 님 모두모두 감사드립니다!
책은 받았지만, 보지않고 주신 힌트로만 문제 해결할 수 있었습니다.
공짜로 배우기에 죄송할 정도의 도움을 주셔서 감사드립니다 ^^
좋은 하루 보내세요!
(알고리즘 전문가는 정말 유연한 사고를 가져야 하는 것 같네요^^;)
gloryof11
멋진 조언 덕분에 문제 해결하였습니다!
감사합니다.
(첨부된 코드는 시간초과되는 코드라 그냥 놔두었습니다.)
안녕하세요. 비밀번호486문제로 매일집중하지는 못했지만, 거의 한달정도 꾸준히 고민하고 있는 알고리즘 초보 입니다.. (어제 인터넷으로 책 구입신청했습니다..)
좀 부족한 코드이지만, 아래 제 코드가 시간초과 안되고 5000 ms 이내로 들어올 가능성이 있을지 의견을 듣고 싶어 글을 올립니다.
고수님들의 조언 부탁드립니다.
감사합니다.
비밀번호486
10년 전