https://www.acmicpc.net/problem/9421
๋ฌธ์
์์ ์ ์ n์ ๊ฐ ์๋ฆฌ์์ ์ ๊ณฑ์ ํฉ์ ๊ณ์ฐํ๋ค. ๊ทธ๋ ๊ฒ ํด์ ๋์จ ํฉ๋ ๊ฐ ์๋ฆฌ์์ ์ ๊ณฑ์ ํฉ์ ๊ณ์ฐํ๋ค. ์ด๋ ๊ฒ ๋ฐ๋ณตํด์ 1์ด ๋์จ๋ค๋ฉด, n์ ์๊ทผ์๋ผ๊ณ ํ๋ค.
700์ ์๊ทผ์์ด๋ค.
- 72 + 02 + 02 = 49
- 42 + 92 = 97
- 92 + 72 = 130
- 12 + 32 + 02 = 10
- 12 + 02 = 1
2๋ ์๊ทผ์๊ฐ ์๋๋ค.
- 22 = 4
- 42 = 16
- 12 + 62 = 37
- 32 + 72 = 58
- 52 + 82 = 89
- 82 + 92 = 145
- 12 + 42 + 52 = 42
- 42 + 22 = 20
- 22 + 02 = 4
- 42 = 16
- ... ๋๋์ง ์๋๋ค
์์๋ 1๊ณผ ์๊ธฐ์์ ์ ์ ์ธํ๊ณ ์ฝ์๊ฐ ์๋ ์์ด๋ค. 2, 3, 5, 7, 11, 13, 17, 19, ... ๋ ์์์ด๋ค.
์์์๊ทผ์๋ ์์์ด๋ฉด์ ์๊ทผ์์ธ ์ซ์์ด๋ค. 7, 13, 19, ... ๋ ์์ ์๊ทผ์์ด๋ค.
n์ด ์ฃผ์ด์ก์ ๋, n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์์์๊ทผ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ n (10 ≤ n ≤ 1000000)์ด ์ฃผ์ด์ง๋ค.
ํ์ด
n๊น์ง์ ๋ชจ๋ ์๋ค์ด true์ธ ๋ฐฐ์ด์ ํ๋ ๋ง๋ ๋ค.
์๋ผํ ์คํ ๋ค์ค๋ก ์์๊ฐ ์๋ ์ ๋ค์ false๋ก ๊ฑธ๋ฌ๋ธ๋ค
๋ฌธ์ ์ ๋์จ ๊ทธ๋๋ก ๊ตฌํํด์ ์๊ทผ์๊ฐ ์๋ ๊ฒฝ์ฐ๋ false๋ก ๊ฑธ๋ฌ๋ธ๋ค
์๊ทผ์ ํ๋ณ :
๊ฐ ์๋ฆฌ ์ซ์์ ์ ๊ณฑ์ ๋ํ ๊ฐ๋ค์ ์ฐ์์ ์ผ๋ก ๊ตฌํ๋ฉด์ ํ๋ฒ์ด๋ผ๋ ๊ตฌํ๋ ๊ฐ์ด ๋์ค๋ฉด ์ง๊ธ๊น์ง ๋์๋ ๊ฐ๋ค์ ์ ๋ถ false์ฒ๋ฆฌํ๋ค
(์ด์ฐจํผ ์ํํ ๊ฒ ๋ปํ๊ธฐ ๋๋ฌธ)
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
const int INF = 1000001;
vector<bool> isSoSang(INF, true);
// ๊ฐ ์๋ฆฌ ์ซ์ ์ ๊ณฑ ๋ํ๋ ํจ์
int sumOfDigit(int num) {
int sum = 0;
while(num>0) {
sum += (num%10)*(num%10);
num/=10;
}
return sum;
}
int main() {
int n;
cin >> n;
// ์์ ํ๋ณ
isSoSang[0] = isSoSang[1] = false;
for(int i=2; i<=sqrt(n); i++) {
if(!isSoSang[i])
continue;
for(int j=i*i; j<=n; j+=i)
isSoSang[j] = false;
}
// ์์์๊ทผ์ ํ๋ณ
for(int i=2; i<=n; i++) {
if(!isSoSang[i]) // ์์ ์๋๋ฉด ์ดํด๋ณผ ํ์๋ ์์ด ๋์ด๊ฐ๋ค
continue;
int tmp = i;
vector<int> history;
while(true) {
if(tmp == 1) {
// ์! 1์ด ๋์๋ค!
break;
}
if(count(history.begin(), history.end(), tmp) != 0) {
// ์! ์ํ์ด ๋ฐ๊ฒฌ๋์๋ค!
for(int j : history) // ๋์๋ ์ ๋ค ์ ๋ถ ์๊ทผ์ ์ ์ธ
isSoSang[j] = false;
break;
}
history.push_back(tmp);
tmp = sumOfDigit(tmp);
}
}
// ์ถ๋ ฅ
for(int i=2; i<=n; i++) {
if(isSoSang[i])
cout << i << "\n";
}
return 0;
}
'๐๏ธ ICPC Sinchon > Basic Math' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 4948๋ฒ: ๋ฒ ๋ฅดํธ๋ ๊ณต์ค (0) | 2023.11.16 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 2168๋ฒ: ํ์ผ ์์ ๋๊ฐ์ (0) | 2023.05.31 |
[BOJ][C++] ๋ฐฑ์ค 2108๋ฒ: ํต๊ณํ (0) | 2023.05.30 |
[BOJ][C++] ๋ฐฑ์ค 2981๋ฒ: ๊ฒ๋ฌธ (0) | 2023.01.24 |
[BOJ][C++] ๋ฐฑ์ค 17087๋ฒ: ์จ๋ฐ๊ผญ์ง 6 (0) | 2023.01.24 |