728x90
개요
https://www.acmicpc.net/problem/26162
실버급 소수판정&브루트포스 문제다.
풀이
에라토스테네스의 체로 소수를 판별한 후, 브루트포스로 답을 구했다.
근데 풀고나니까 골드바흐의 추측이란걸 이용하면 훨씬 더 간단히 구할 수 있다는 사실을 알아 버렸다,,
골드바흐의 추측
2보다 큰 모든 짝수는 두 개의 소수(Prime number)의 합으로 표시할 수 있다는 것
코드
#include<iostream>
using namespace std;
constexpr int LIMIT = 120;
int N;
int a[LIMIT];
int prime[LIMIT];
string ans[LIMIT];
void solve(int i)
{
for (int j = 2; j < LIMIT; j++)
{
for (int k = 2; k < LIMIT; k++)
{
if (j + k != a[i]) continue;
if (!prime[j] && !prime[k])
{
ans[i] = "Yes";
return;
}
}
}
ans[i] = "No";
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++)
cin >> a[i];
for (int i = 2; i < LIMIT; i++)
{
int j = i;
while (i*j<LIMIT)
{
prime[i * j] = 1;
j++;
}
}
for (int i = 0; i < N; i++)
solve(i);
for (int i = 0; i < N; i++)
cout << ans[i] << "\n";
}
'알고리즘&자료구조 > 문제' 카테고리의 다른 글
[BOJ] 14442 벽 부수고 이동하기 2 C++ (2) | 2023.02.05 |
---|---|
[BOJ] 2206 벽 부수고 이동하기 C++ (0) | 2023.02.04 |
[BOJ] 7569 토마토 C++ (0) | 2023.02.04 |
[BOJ] 7576 토마토 C++ (1) | 2023.02.04 |
[BOJ] 2146 다리 만들기 C++ (1) | 2023.02.04 |