1에서 100까지의 소수(decimal) 전부를 더하는 프로그램.
소수 찾기에서는 중복되는 횟수가 많아 root를 사용함으로써 확인의 개수를 현저하게 줄일 수 있다.
이중 루프에서도 n이 1000000개라고 하더라도 2번째 루프에서는 root로 1000개만을 탐색하므로 n의 1%만을 더해진다.
그러므로 이 소수 알고리즘은 O(n)과 가깝게 모든 소수를 찾아 더할 수 있다.
루트를 사용하는 것이 효과적인 까닭은 루트를 경계 위에 나오는 숫자들은 루트의 아래의 숫자의 배수 경우로 포함되는 이유다.
#include<stdio.h>
#include<math.h>
int main(){
int sum = 0;
for (int i = 2; i <= 100; i++){
int prime = true;
for (int j = 2; j <= sqrt((double)i); j++){
if (i%j == 0){
prime = false;
}
}
if (prime)
sum += i;
}
printf("%d\n", sum);
}
'알고리즘' 카테고리의 다른 글
| 정렬 (0) | 2016.05.13 |
|---|---|
| 큰 수 계산기 간단하게 만드는 알고리즘 기법. (0) | 2015.10.30 |
| 퀵 정렬(Quick Sort) (0) | 2015.10.30 |
| 합병 정렬(Merge Sort) (0) | 2015.10.30 |
| 삽입 정렬(Insert Sort) (0) | 2015.10.30 |


