[2004년 기말 8번] 소수 구하기 - 정의/반복문
1. 목적
- 소수를 출력하는 알고리듬을 안다.
2. 문제 (점수 : 30 점)
- 입력된 두 양의 정수 사이에 존재하는 소수(prime number)를 찾아내는 프로그램을 작성한다.
- 발견된 모든 소수를 출력한다.
- 실행 화면
100과 1000사이에 존재하는 소수들 :
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197
199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313
317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439
443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571
577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691
701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829
839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977
983 991 997
Press any key to continue
3. 이해
- 소수의 정의를 이해하고 C 코드로 구현할줄 아는가?
- 반복문을 정확히 이해 하는가?
4. 코드
#include <stdio.h>
int main()
{
int i, start, end;
typedef enum {false, true}bool;
bool prime = true;
i = start = end = 0;
printf("시작값과 끝값을 입력하세요 : ");
scanf("%d %d", &start, &end);
printf("%d과 %d사이에 존재하는 소수들 : \n", start, end);
while(start <= end)
{
for(i = 2; i < start; i++)
{
prime = ( start % i == 0 ? false : true);
if(prime == false) break;
}
if(prime && start != 1) printf("%d ", start);
start++;
}
return 0;
}
5. 해설
- enum 은 열거형으로 괄호 안에 있는 순서대로 값이 되는 유용한 선언문입니다. 외부에서 그 값을 쓸려고 할때 특별한 정의가 없다면 그 자료는 0,1,2 ... 로 값이 쓰여됩니다.
- 소수(prime number, 0이 아니고 -1 과 1 사이의 유리수인 소수와는 다른 계념입니다.)는 1을 초과 하는 수 중에 1과 수 자신의 약수 외에 1과 수 사이에 약수가 있으면 소수가 아닙니다. 특수한 수열입니다. (예 : 2 3 5 7 11 13 17 ... )
- 2 에서 출발하여 해당수 전까지 진행하면서 나머지가 0 이면 그 수는 약수가 되므로
6. 참고
- http://www.cinsk.org/cfaqs/html/node11.html : boolean 자료 정의 및 선언
- 소수 설명