혼자 공부하는 C언어 16챕터 도전실전예제
문제
소수(prime number) 계산 프로그램
키보드로 양수를 입력한 후에 입력한 수까지의 모든 소수를 출력합니다. 2부터 한 줄에 5개씩 출력하며 소수가 아닌 수는 X를 출력합니다. 입력한 수에 따라 적절한 크기의 배열을 동적 할당하여 사용합니다.
풀이과정: 동적할당을 이용하지 않고 반복문을 돌려도 되지만, 문제에서 동적배열을 사용하라고 했으므로 동적배열을 사용하도록 한다. 이를 위해 malloc함수를 사용한다.
#include <stdio.h>
#include <stdlib.h>
int is_prime(int);
int main(void)
{
int number;
int i;
int* pn;
printf("양수 입력 : ");
scanf("%d", &number);
pn = (int*)malloc(number * sizeof(int));
// 받은 수 만큼의 공간을 할당받는다.
if (pn == NULL)
{
printf("메모리가 부족합니다!\n");
exit(1);
}
for (i = 0; i < number - 2; i++)
{
*(pn + i) = i + 2;
}
// 포인터에 2부터 저장
for (i = 0; i < number - 2; i++)
{
if (is_prime(pn[i]) == 1)printf("%5d", pn[i]);
else printf(" X");
if (pn[i] % 5 == 1) printf("\n");
}
// 출력
free(pn);
return 0;
}
int is_prime(int number)
{
int i;
int count = 0;
for (i = 2; i < number; i++)
{
if (number % i == 0 && number != i) count++;
}
if (count == 0) return 1;
else return 0;
}