소수구하기 | Prime Number | 에라토스테네스의 체

Algorithm 2019. 8. 30. 10:12
반응형

1과 자기 자신으로 밖에 나눠지지 않는 수 

 

0은 소수가 아니다.

1은소수가 아니다.

 

https://ko.wikipedia.org/wiki/%EC%86%8C%EC%88%98_(%EC%88%98%EB%A1%A0)

 

소수 (수론) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 좌측은 소수, 우측은 합성수. 소수란 자신보다 작은 두 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다. 소수(素數, 발음: [소쑤], 문화어: 씨수, 영어: prime number)는 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다. 예를 들어, 5는 1x5 또는 5x1로 수를 곱한 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 5는 소수이다. 그러나 6은 자신보다 작은 두 숫자

ko.wikipedia.org

https://namu.wiki/w/%EC%86%8C%EC%88%98(%EC%88%98%EB%A1%A0)

 

소수(수론) - 나무위키

최근 수정 시각: 2019-08-17 14:05:41 1. 개요2. 성질 및 미해결 문제3. 용어에 대하여4. 소수와 알고리즘, 암호5. 소수 판정법 및 소인수분해6. 소수 목록6.1. 100보다 작은 소수6.2. 100~1000 사이의 소수7. 그 외1과 자기 자신으로밖에 나누어지지 않는 1 이외의 정수.소수의 정의는 '1과 자기 자신으로밖에 나누어 떨어지지 않고 자기 자신의 곱셈의 역수가 없는 수'.[1][2] 소수가 아니고 곱셈의 역수가 없는 수를

namu.wiki

https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4

 

에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학에서 에라토스테네스의 체는 소수(소쑤)를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색) 자기 자신을 제외한 2의 배수를 모두 지운다. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초

ko.wikipedia.org

해결 방법 

1. 길이가 n인 배열을 만들어 초기값을 true로 대입  

2. 반복문을 사용하여 2부터 n까지를 반복

3. 반복문 안에서 배열의 인덱스값이 true일경우 인덱스의 배수부터 인덱스 값만큼 증가 하며 n까지 반복문 실행 

4. 위 반복문에서 배열의 인덱스값을 false로 대입 

5. 배열의 인덱스 값이 true인경우만 소수가 됨 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Collections.Generic;
 
namespace Application
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            //소수 구하기 (에라토스테네스의 체)
            var sol = new Solution();
            var result = sol.solution(20);
            Console.WriteLine("result: " + result);
 
        }
    }
 
    public class Solution
    {
        public int solution(int n)
        {
            int answer = 0;
            bool[] arr = new bool[n];
 
            for (int i = 2; i < n; i++) {
                arr[i] = true;
            }
 
            for (int i = 2; i < n; i++) {
                if (arr[i]) {
                    for (int j = i * i; j < n; j += i) {    //i의 배수는 소수가 아님 
                        arr[j] = false;
                    }
                }
            }
 
            for (int i = 0; i < arr.Length; i++) {
                if (arr[i]) {
                    Console.Write(i + " ");
                    answer += 1;
                }
            }
 
 
            return answer;
        }
    }
}
 
 
 

반응형

'Algorithm' 카테고리의 다른 글

선택 정렬  (0) 2019.08.30
이진탐색 | 재귀  (0) 2019.08.30
LeetCode | Easy | Reverse Integer  (0) 2019.08.29
LeetCode | Easy | Palindrome Number | 팰린드롬  (0) 2019.08.29
프로그래머스 | 프린터 | 큐(Queue)  (0) 2019.08.29
: