에라토스테네스의 체4 [백준 1929/c++] 소수 구하기 에라토스테네스의 체를 최소한의 범위로 설정해서 시간초과가 되지 않도록 구하는 문제이다 https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net #include using namespace std; int main(){ ios_base::sync_with_stdio(false); cout.tie(NULL); int m, n; bool ar[1000004]; cin >> m >> n; for (int i = 2 ; i 2022. 7. 30. [백준 2581/c++] 소수 범위 내 소수를 에라토스테네스의 체를 이용하여 배열로 구하고 해당 수를 배열의 값에서 찾아 소수인지 판별, 소수면 벡터에 넣어서 합과 최소를 구하는 문제이다 https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net #include using namespace std; int main() { int m, n, sum, min; int ar[10004]; vector v; cin >> m >> n; for (int i = 2; i 2022. 7. 12. 소수 판별하기, 범위 내 소수 구하기 저번에 간단하게 올렸었지만 코드로는 이해 못해서 버벅거리니 하나하나 꼼꼼히 다시 정리하려한다 특정한 수의 소수 판별 함수 소수는 자기 자신과 1이외의 수로 나누어 떨어지지 않아야 하므로( 자신과 1 외에 약수가 없어야 하므로) 소수 판별 함수를 간단히 코드로 구현하면 아래와 같다 bool isPrimeNumber(int a){ // 0은 물론이고, 1과 자기자신외의 숫자로 자신이 나눠져 떨어지는지 보므로 범위는 2이상, n 미만이다 for(int i=2; i 2022. 6. 18. 에라토스테네스의 체, 소수판별법 에라토스테네스의 체 소수를 걸러내는 방법, 소수의 배수(합성수)들을 하나씩 지워나가 남는 것들은 소수라는 결론에 도달하는 방식이다 소수 판별법 소수는 1 과 자기 자신으로만 나누어 떨어지므로, n 이하의 모든 자연수를 대입하여 1외에 수로 나누어 떨어지는지 확인하면 되지만 모두 계산할 필요없이 n의 제곱근 이하의 값이 1외의 수로 나누어 떨어지는지 확인하면 된다 왜냐하면 n 이 소수가 아닌 합성수라면, n = a * b 로 나타낼 수 있는데(a,b는 1외의 자연수) a와 b는 모두 n의 제곱근 이하의 값을 가지므로, n의 제곱근에서 나누어지는 수(a와 b) 가 있는지만 확인하면 소수인지 아닌지를 구분 가능한것이다. 제곱근 n이하에서 나누어 떨어지면 합성수, 나누어 떨어지지 않으면 그 수는 소수이다 2022. 6. 10. 이전 1 다음