반응형
문제 7번
소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다.
이 때 10,001번째의 소수를 구하세요.
접근방법
1. 2부터 시작해서 충분히 큰 수까지 차례로 (=num)
2. 1부터 num까지 나눠본다.
3. 나머지가 0인게 2개일때만 소수이므로, 이때 카운팅을 한다. ( if (count==2) → check+1 )
4. 이렇게 카운팅 해서 10001번째 나오는 숫자가, 우리가 구하고자 하는 10001번째의 소수이다.
#include <iostream>
using namespace std;
int main()
{
int count = 0; // 소수 판별
int check = 1; // 몇 번째 소수인지
for (int num = 2; num < 1000000000; num++)
{
for (int i = 1; i < num+1; i++)
{
if (num % i == 0)
{
count += 1;
}
}
if (count == 2)
{
//cout <<check << "번째 소수 : " << num << endl;
if (check == 10001)
{
cout << "최종 " << check << "번째 소수 : " << num << endl;
break;
}
check++;
}
count = 0;
}
return 0;
}
개선점
- 충분히 큰 수를 위 코드에서는 1,000,000,000 (10억)으로 설정했는데, 10001번째 소수가 이보다 큰 값이면, 시행 값을 다시 설정해야 한다.
- '에라토스테네스의 체'를 사용하는 방법도 있다.
참고
https://github.com/mannlim/ProjectEuler
반응형
'알고리즘 문제 & 프로그래밍 > C++' 카테고리의 다른 글
[C++]프로젝트 오일러 4번 문제&풀이 (세자리 수를 곱해 만들 수 있는 가장 큰 대칭수) (0) | 2020.11.18 |
---|---|
[C++]프로젝트 오일러 3번 문제&풀이 (가장 큰 소인수 구하기) (0) | 2020.11.17 |
[C++]프로젝트 오일러 2번 문제&풀이 (피보나치 수열에서 4백만 이하이면서 짝수인 항의 합) (0) | 2020.11.17 |
[C++]프로젝트 오일러 1번 문제&풀이 (1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면?) (0) | 2020.11.17 |
[C++]백준 1110번 더하기 사이클 문제 (while문) (0) | 2020.11.10 |
댓글