읽어주셔서 감사합니다.
지난 블로그의 글을 응용해서 제목과 같이 1 ~ 100까지의 소수를 탐색하는 프로그램을 만들어 보겠습니다.
(참고로 이 블로그는 최대한 이해가 쉽도록 쓰는 글입니다. 고로 프로그램의 성능은 떨어집니다. 고성능의 소수 탐색기가 필요한 분들은 아래의 제 signature블로그 글을 참고해주세요)
https://kms-program.tistory.com/12
KMS04 : C++ 소수탐색 프로그램 Ver3 (source)
안녕하세요 tomskang입니다. 오늘은 지난번에 만든 소수 탐색기를 업그레이드 시켜보았는데요 이번에 확실하게 프로그래밍을 각잡고 해서, 최적화되었다 할 수는 없지만, 여러 방면으로 지금까지
kms-program.tistory.com
코드
오늘은 변 내용이 없고, 사실성 이전에 만든 소수판독 함수의 응용 버전이며, 주석을 꽤나 자세하게 적어놓았기에 별다른 설명을 적지 않겠습니다.
소스가 필요하신 분들은 Ctrl + C Ctrl + V로 퍼가시면 됩니다
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
//n이 소수인지 아닌지를 판변해, 소수면 1, 아니면 0을 반환
int isPrime(int n) {
int div;
for (div = 2; div < n; div++) {
if ((n % div) == 0) { //만약 n이 div로 나누어진다면
return 0; //n은 소수가 아님
}
}
return 1;
}
int main(void) {
int num;
for (num = 2; num <= 100; num++) { //2 ~ 100까지의 모든 정수 num에 대해
if (isPrime(num) == 1) { //num이 소수라면
printf("%d \n", num); //num을 출력
}
}
return 0;
}
+ 추가적으로 간단하게 만들어본 가독성이 어느정도 존재하면서 효율적인 코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#define FIN 100
using namespace std;
vector<int> V(0);
int F(int S, int N) {
static int C = 0;
if (S >= 0) {
C = S;
return 1;
}
if (C) {
N += 2;
C = 0;
}
else {
N += 4;
C = 1;
}
return N;
}
int I(int N) {
int D, i = 0;
for (D = V.at(i++); D <= (int)floor(sqrt((double)N)); D = V.at(i++)) {
if (!(N % D)) { return 0; }
}
return 1;
}
inline void R(int N) {
printf("%d \n", N);
V.push_back(N);
}
int main(void) {
int N;
R(2);
R(3);
F(1, 0);
for (N = 5; N <= FIN; N = F(-1, N)) {
if (I(N)) {
R(N);
}
}
return 0;
}
사용방법
입력 : 없음
출력 : 1 ~ 100까지의 모든 소수 출력
종료 : 출력후 종료
실행화면
감사합니다
'C C++ language' 카테고리의 다른 글
C언어 두 정수 입력 후 더하여 출력하기 (0) | 2021.05.15 |
---|---|
C언어 배열의 순서 바꿔서 출력하기 (with source) (0) | 2021.05.08 |
C언어 십진법 이진법 변환기 구현하는 방법 [with source] (0) | 2021.04.10 |
C언어 소수 판단 하는 방법 [with source] (0) | 2021.04.03 |
C언어 계단모양으로 별 출력하는 방법 [with source] (0) | 2021.03.27 |