-
백준 2581 - 소수백준 algorithm 2019. 9. 27. 15:54반응형
문제 설명 에라토스테네스의 체를 사용하면 풀 수 있는 문제이다.
기본적인 알고리즘은 쉽게 짰었는데 제대로된 예외처리를 못해서 5번 넘게 틀렸다....
2, 3, 5등은 소수인데 이 수들까지 소수가 아닌 것으로 인식을 되게 코드를 짜서 더 틀렸었다.
작은 범위의 수들부터 정확히 따져보면서 코드를 짜야겠다.에라토스테네스의 체는 아래 URL에서 확인 가능하다.
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
#include <iostream> #include <math.h> using namespace std; class Prime_Number { public : int number; bool prime=true;//true가 소수, false가 소수가 아니다. }; bool detec(int n) { if (n <= 1)return false; for (int i = 2; i <= sqrt(n); i++) //keypoint 2 3 5 등은 true로 반환함 { if(n%i==0) { return false; } } return true; } int main() { int sum = 0;//소수의 합 int min = 0;//가장 작은 소수 int M, N, width; cin >> M >> N; width = N-M + 1; Prime_Number *arr = new Prime_Number[width];//배열 동적할당 for (int i = 0; i < width; i++)//배열에 숫자 대입 { arr[i].number = M; M++; } for (int j = 0; j < width; j++) { arr[j].prime = detec(arr[j].number); } for (int k = width-1; k >= 0; k--) { if (arr[k].prime) { min = arr[k].number; sum += arr[k].number; } } if(sum==0) { cout << -1 << '\n'; } else { cout << sum << '\n' << min<<'\n'; } return 0; }
반응형'백준 algorithm' 카테고리의 다른 글
백준 2798 - 블랙잭 (0) 2019.10.02 백준 1676 - 팩토리얼 0의 개수 (0) 2019.09.29 백준 10773 - 제로 (0) 2019.09.25 백준 2739 - 구구단 (0) 2019.09.25 백준 1110 - 더하기 사이클 (0) 2019.09.24