C C++ language

C언어 소수 판단 하는 방법 [with source]

KMS studio 2021. 4. 3. 13:00

읽어주셔서 감사합니다.

오늘은 C언어로 입력받은 문자를 아스키 코드로 출력하는 방법을 알아보도록 하겠습니다.


코드1

효율적이라 할 수는 없지만 이해가 빠른 코드

코드 목적에 맞게 주석을 작성했습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define TRUE	1
#define FALSE	0

int isPrime(int n) { //소수판단 함수
	int i;
	if (n == 1) { return FALSE; } //만약 수가 1이면, false 출력
	for (i = 2; i < n; i++) {
		if ((n % i) == 0) { return FALSE; } // 2 ~ n-1까지의 수 중 약수가 존재하면 false 출력
	}
	return TRUE; //약수가 없다면 true 출력
}

int main(void) {
	int num;
	scanf("%d", &num);
	if (isPrime(num) == TRUE) { //소수판단 (함수호출)
		printf("%d is prime\n", num);
	}
	else {
		printf("%d isn't prime", num);
	}
	return 0;
}

코드2

어느정도 효율적인 코드

변화된 점은 단 두가지입니다.

1. math.h 라이브러리 추가

2. isPrime 함수 for문 내 조건문 식이 복잡한 식으로 변경

 * 사실 이 함수는 (루트 n의 내림)을 뜻하는데, 몇몇 IDE에서 형 변환때문에 오류가 일어나서 저렇게 길어졌습니다. IDE로 visual studio나, code block을 쓰고 있다면, floor(sqrt(n))으로 바꾸셔도 됩니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

#define TRUE	1
#define FALSE	0

int isPrime(int n) { //소수판단 함수
	int i;
	if (n == 1) { return FALSE; } //만약 수가 1이면, false 출력
	for (i = 2; i <= (int)floor(sqrt((double)n)); i++) {
		if ((n % i) == 0) { return FALSE; } // 2 ~ n-1까지의 수 중 약수가 존재하면 false 출력
	}
	return TRUE; //약수가 없다면 true 출력
}

int main(void) {
	int num;
	scanf("%d", &num);
	if (isPrime(num) == TRUE) { //소수판단 (함수호출)
		printf("%d is prime\n", num);
	}
	else {
		printf("%d isn't prime", num);
	}
	return 0;
}

사용방법

입력 : 숫자 + enter

출력 : 입력한 숫자가 소수인지 아닌지를 판단 후 출력함

종료 : 출력후 종료


실행화면


appendix

지금 있는 코드 2보다 더 효율적이고, 커다란 함수판독기를 원하시는 분은 아래 링크 클릭

(KMS signature 블로그로 이동합니다.)

KMS04 - prime searching program