먼저 C언어 소수 소스 입니다.
#include <stdio.h>
/*
소수를 출력하는 프로그램
소수 : 1과 자기자신만을 약수로 갖는 수
*/
main()
{
int num, count, count_all=0;
printf("소수를 구하고 싶은 범위를 입력하세요 (1~입력값) : ");
scanf_s("%d", &num);
for (int i = 1; i <= num; i++) {
count = 0;
for (int j = 1; j <= i; j++) {
if (i%j == 0) {
count++;
}
}
if (count == 2) {
printf("%d\n",i);
count_all++;
}
}
printf("1에서 %d까지 총 %d개의 소수가 있습니다.\n", num,count_all);
}
다음은 c언어 소수 구하기 결과 입니다.
c언어 소수 알고리즘 설명
우선 소수라는 것의 의미를 정확히 파악하는게 중요합니다.
소수라는 것은 1과 자기자신만으로 나누어지는 수 == 1과 자기 자신 이외에는 나누어지지 않는 수 입니다.
위의 소스는 이 점을 활용한 알고리즘을 사용하였습니다.
우선 구하고자하는 값의 상한선을 입력 받습니다(num)
이제 이 숫자까지 모든 수를 그 숫자 이하의 값으로 모두 나눠보는 것입니다.
나눈다는것이 /(divide)를 사용하는 것이 아니라 %(mod)를 통해서 나머지 값만 보면 됩니다.
나머지가 0 이라는 것은 나눠 떨어진다는 것 이기 때문에 이게 더 간단하죠
즉 모든수에 대입해본 결과 나머지가 0이 나온경우가 2번 이라는 것은 1과 자기자신밖에 없다는 것을 의미하죠 ?
c언어 소수 구하기 알로리즘 설명
ex)
2가 왔을 때
2/1의 나머지 = 0 (1은 모든 수의 약수) count = 1
2/2의 나머지 = 0 count = 2
따라서 2는 소수 입니다.
3이 왔을 때
3/1의 나머지 = 0 count = 1
3/2의 나머지 !=0 count = 1
3/3의 나머지 =0 count = 2
따라서 3은 소수
4가 왔을 때
4/1의 나머지 = 0 count = 1
4/2의 나머지 =0 count = 2
4/3의 나머지 !=0 count = 2
4/4의 나머지 =0 count = 3
즉 약수는 3개 -> 소수가 아님
count라는 변수는 곧 약수의 개수 입니다.
약수의 개수가 2개이다 = 약수가 1과 자기자신뿐이다 = 소수
이걸 이용하여 c언어 소수를 구하였습니다.
이상으로 C언어로 소수를 구하는 알고리즘 포스팅을 마치겠습니다.
감사합니다~
'IT프로그래밍' 카테고리의 다른 글
c언어버블정렬 / 버블 정렬 / c언어 버블 정렬 / 버블 소팅 / c언어 버블 소팅 / 버블정렬 (1) | 2015.02.02 |
---|---|
c언어 두 점 사이의 거리 / 두 점 사이의 거리 구하는 c언어 알고리즘 (0) | 2015.01.30 |
c언어 최대공약수 c언어 최소공배수 / c언어 최소공배수 최대공약수 / c언어 최대공약수 소스 / c언어 최소공배수 소스 (0) | 2015.01.30 |
c언어 약수 출력 / c언어 약수 소스 / c언어 약수 알고리즘 (3) | 2015.01.30 |
자바 for문 / java for 문 / 자바 for문 예제 / java for문 예제 / 자바 for문 별 / 자바 반복문 (0) | 2015.01.26 |
jsp session 속성 / jsp session 설명 / jsp 세션 속성 (0) | 2015.01.13 |
PHP 변수 전달 / PHP 자료 넘기기 / HTML 자료 넘기기 / POST, GET 방식 차이 / PHP 기초, HTML 기초 (1) | 2015.01.12 |
<input type = "button"> / input type = button 으로 링크 걸기 설명 + 주의 (0) | 2015.01.12 |
댓글