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 블로그로 이동합니다.)