1. 목적
- 소수를 이해한다.
- 사용자 정의 자료형 함수를 출력한다.
2. 문제 (점수 : 15 점)
- 두 정수 사이에 존재하는 소수(prime)를 출력한다.
- 입력 순서에 따른 크기 순서는 상관치 않는다.
- 마지막에 소수의 개수를 출력한다.
- 출력 화면
정수값 두개를 입력하세요 : 541 23
소수 : 23 29 31 37 41 43 47 53 59
61 67 71 73 79 83 89 97 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
23 와 541 사이의 소수의 개수 : 92
Press any key to continue
3. 이해
- 소수를 정확히 이해하고 C 에 적용 시킬수 있는가?
4. 코드
#include <stdio.h>
enum bool {false, true};
enum bool isprime(int detect)
{
int i = 2;
if(detect <= 1) return false;
while(i < detect)
{
if (detect % i == 0) return false;
i++;
}
return true;
}
int main()
{
int a, b, start, end, count;
a = b = start = end = count = 0;
printf("정수값 두개를 입력하세요 : ");
scanf("%d %d", &a, &b);
start = a < b ? a : b;
end = a < b ? b : a;
a = start;
b = end;
printf("소수 : ");
while(start <= end)
{
if(isprime(start))
{
printf("%d\t",start);
count++;
}
start++;
}
printf("\n\n%d 와 %d 사이의 소수의 개수 : %d\n", a, b, count);
return 0;
}
5. 해설
- 이전 문제와 다르게 풀기 위해서 isprime 이라는 판정 함수를 만들었습니다.
- 사용자 정의형 bool 을 만들어서 isprime 해서 나온 값을 false / true 로 구분해서 사용했습니다.
6. 참고
- 유사 문제