문제

소수(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;
}

Tags:

Updated: