728x90
✅ 오늘의 문제 : 소수의 개수 출력하기
임의의 N개의 숫자를 입력받고, 그 중에서 소수인 수의 개수를 출력하는 프로그램을 만들어보세요.
(코뮤니티 모각코 과정 中 출제되어 푼 문제입니다.)
실행예시
숫자의 개수 : 5
3
9
13
20
12
소수의 개수는 2입니다.
초안
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, prinum = 0;
int j = 0;
printf("숫자의 개수 : ");
scanf("%d", &num);
int* numPtr = malloc(sizeof(int) * num); // (int 크기 * 숫자의 개수)만큼 동적 메모리 할당
//int* numPtr = calloc(num, sizeof(int))
for (int i = 0; i < num; i++) {
scanf("%d", &numPtr[i]);
//소수 판별
for (j = 2; j < numPtr[i]; j++) {
if (numPtr[i] % j == 0) {
break;
}
}
if (numPtr[i] == j)
prinum++;
}
printf("소수의 개수는 %d개입니다.", prinum);
free(numPtr);
return 0;
}
소수 판별하기 부분은...😅
처음에 이렇게 짰었다.
for (int i = 0; i < num; i++) {
for (int j = 2; j <= numPtr[i]; j++) {
if (numPtr[i] % j == 0) {
if (numPtr[i] == j)
prinum++;
}
}
}
디버깅 해보니 자꾸 소수의 개수 = 숫자의 개수로 출력되길래
대충 다시 시뮬레이션 돌려보니
모든 숫자가 다 돌아가는 코드였음
그래서 초안처럼 수정!
숫자 입력받는 반복문 안에서
소수 판별하는 반복문도 추가해서 넣어
결론적으로
입력 -> 판별, 입력 -> 판별, ... , 소수의 개수 출력
이렇게 만들었는데,
지금은 작은 숫자를 사용하지만
실제로 사용하게 되었을 때
백만 단위의 숫자가 들어오게 되면,
입력받고 판정, 입력받고 판정 할때 걸리는 시간이 거슬릴 것...이라고 함
한 번에 입력받고 한 번에 판정받는 걸로 수정 !!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, prinum = 0;
int j = 0;
printf("숫자의 개수 : ");
scanf("%d", &num);
int* numPtr = malloc(sizeof(int) * num); // (int 크기 * 숫자의 개수)만큼 동적 메모리 할당
//int* numPtr = calloc(num, sizeof(int))
//숫자 입력받기
for (int i = 0; i < num; i++) {
scanf("%d", &numPtr[i]);
}
//소수 판별
for (int i = 0; i < num; i++) {
for (j = 2; j < numPtr[i]; j++) {
if (numPtr[i] % j == 0) {
break;
}
}
if (numPtr[i] == j)
prinum++;
}
printf("소수의 개수는 %d개입니다.", prinum);
free(numPtr);
return 0;
}
'ProgrammingLanguage > C언어' 카테고리의 다른 글
C언어 | 헤더파일 예제, #ifndef, #pragma once (0) | 2021.02.19 |
---|---|
C언어 | 문자열 함수, 버퍼, 버퍼 비우기 예제 (0) | 2021.02.19 |
C언어 | 동적 메모리 할당 예제 (0) | 2021.02.16 |
C언어 | continue문 예제 (0) | 2021.02.14 |
C언어 | 반복문 예제, 구구단, 합 구하기, n! 구하기, 약수 출력, 패턴 출력 (0) | 2021.02.14 |