조건이 뭐냐하면은
제일 작은 2부터 소수 100개를 구한다.
배열을 사용해 100개의 소수를 저장한다
2와 3은 배열에 초기값으로 저장한다
소수인지 판단할 정수는 4부터 시작한다 끝은알수없음.
소수판단을 위한 나눗셈을 할때 배열에 있는 소수를 분모로 사용한다.
이건데...
#include <stdio.h>
int main()
{
int Sosu[100];
int count=2,check=0,i,j;
Sosu[0]=2;
Sosu[1]=3;
for(i=4; count<100; i++)
{
for(j=0; j<count; j++)
{
if(i%Sosu[j]==0)
{
check++;
}
break;
}
if(check == 0)
{
Sosu[count] = i;
count++;
}
else
{
check = 0;
}
}
for(i=0; i<100; i++){
printf(\"%d\\n\", Sosu[i]);
}
}
내가짠 소스로 프로그램을 출력하면
첨에 2 3 은 나오구 그담부터는 홀수만 100개까지나와 어디가 잘못된거지 ???
님 왜 i를 소수로 나누세요? i를 j로 나누고 판단해서 소수에 집어넣어야 하는거아님?;;
동천//배열에 소수를 집어넣고 정수를 4부터 나누어서 해야해서 저렇게한건데... 거꾸로하면안되요..
걍 다 틀렸음
dot//헐....
n인 숫자가 소수인지 판단하는게요, 2부터 n-1까지의 자연수로 나누었을 떄 나머지가 0이 없으면 소수가 아닌가요? 님이 주장하시는 건 소수를 이용해서, 다음번 소수를 찾겠다는건데 소수는 일반항이 없잖아요. 그렇게 하기 불가능해요. 로직을 아예 바꿔야함
ㄴㅁㅇ//으아...5시간쨰 이것만보고있는데 ㅠㅠ
그건 님이 기초가 안되있기 떄문일꺼예요.. 실력같은걸 떠나서 기초가 안되어 있으세요. 님 프로그램 짜기전에 알고리즘 설계하고 순서도 그려보시고 프로그램짜시나요? if안에 괄호가 없는것도 나중에 아차하면 에러가 나기 쉽구요. 즉 i%Sosu[j]==0가 아니라, (i%Sosu[j])==0로 쓰는 습관 꼭 들이시구요, 또 변수를 항상 초기화하는 버릇도 들여놓으셔야 합니다. 알고리즘, 순서도 얘기를 왜 하냐면, 필요없는 변수가 너무 많고 소수를 구하는 방법도 잘못되어서 그래요. 이상 맨첨에 허구헌날 들었던 잔소리였음..
순서도를 그리고, 알고리즘을 짜고, 변수들의 역할을 정하고, 최종적으로 변수의 개수를 정하고 프로그램을 짜는게 느려보일지 몰라도 더 빨라요.
안그러면 코드작성-디버깅-테스트-알고리즘체크-2차코딩-디버깅-테스트-알고리즘체크-... 무한루프
for(j=0; j<count; j++) { if(i%Sosu[j]==0) { check++; } break; } => break가 if 밖에 있으면 한번돌고 무조건 나가지. 그리고 j를 count까지 돌리는게 아니고 i보다 작을때만 돌려야지
글고 연산자 우선순위란게 있는데 (i%Sosu[j])==0 <== 이런 습관 들일 필요 전혀 없음. 나중에 입사해서 사수가 변태라 그런거 시키면 그때가서 하면 됨.
for(i=4; count<100; i++) <= 좀 골때리긴 하는데 문제는 없는거 같은데. i는 계속 증가할테고 count가 100이 안되면 계속 도는거고. i가 int 넘어갈때만 문제가 되겠네