https://www.acmicpc.net/problem/9421
9421λ²: μμμκ·Όμ
λ¬Έμ μμ μ μ nμ κ° μ리μμ μ κ³±μ ν©μ κ³μ°νλ€. κ·Έλ κ² ν΄μ λμ¨ ν©λ κ° μ리μμ μ κ³±μ ν©μ κ³μ°νλ€. μ΄λ κ² λ°λ³΅ν΄μ 1μ΄ λμ¨λ€λ©΄, nμ μκ·ΌμλΌκ³ νλ€. 700μ μκ·Όμμ΄λ€. 72 + 02
www.acmicpc.net
β¨ λ΄ μμ€ μ½λ
#include<iostream>
#include <vector>
using namespace std;
int dp[1000001] = { 1, };
//0->νλ² λ°©λ¬Έ, -1->μλ,1->λ§μ
int func(int n) {
int sum = 0;
while (n != 0) {
sum += (n % 10) * (n % 10);
n /= 10;
}
if (dp[sum]==-1) {
return dp[sum];
}
if (sum == 1) {
return 1;
}
if (dp[sum] == 0) {
return -1;
}
dp[sum] = 0;
dp[sum] = func(sum);
return dp[sum];
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int N;
vector<int> vec;
cin >> N;
fill_n(dp, 1000001, 1);
for (int i = 0; i <= N; i++) {
vec.push_back(i);
}
//μλΌν μ€ν
λ€μ€μ 체
for (int i = 2; i <= N; i++) {
if (vec[i] == 0) {
continue;
}
for (int j = 2; j*vec[i] <= N; j++) {
vec[j*vec[i]] = 0;
}
}
//μκ·Όμ νμ
for (int i = 2; i <= N; i++) {
if (vec[i] != 0) {
if (func(vec[i])==1) {
cout << vec[i] << '\n';
}
}
}
return 0;
}
π λ¬Έμ νμ΄
μλΌν μ€ν λ€μ€μ 체λ₯Ό μ΄μ©ν΄ μΌλ¨ μμλ₯Ό κ±Έλ¬λ΄κ³ , μμλ€ μ€μμ μκ·ΌμμΈ κ²μ νμ
ν λ² κ±°μ³κ°κ² λλ©΄ 무쑰건 0μΌλ‘ μ μ₯, μμλ μλμ κ°λ€
- 2^2= 4 -> dp[4] = 0
- 4^2= 16 0 -> dp[16] = 0
- 1^2+ 6^2= 37 -> dp[37] = 0
- 3^2+ 7^2= 58 -> dp[58] = 0
- 5^2+ 8^2= 89 -> dp[89] = 0
- 8^2+ 9^2= 145 -> dp[145] = 0
- 1^2+ 4^2+ 5^2= 42 -> dp[42] = 0
- 4^2+ 2^2= 20 -> dp[20] = 0
- 2^2+ 0^2= 4 -> dp[4]λ μ΄λ―Έ 0μ΄κΈ° λλ¬Έμ -1 λ°ν
μμ dp[4] = dp[16] = dp[37] = dp[58] = dp[89] = dp[145] = dp[42] = dp[20] = -1μ΄ λ¨
κ·Έ ν μ΄λ€ μμ κ³μ°μ νλ μ€κ°μ 4, 16, 37, 58, 89, 145, 42, 20, μ€μ νλκ° λμ€λ©΄ μμ λμΌνκ² κ³μ°μ΄ μ§νλμ΄ λ¬΄ν루νμ λΉ μ§κΈ° λλ¬Έμ, μμ μ«μ μ€ νλκ° λμ€λ©΄ 무쑰건 μκ·Όμκ° μλ
if (dp[sum]==-1) { return dp[sum];} : κ³μ°ν μκ° μ΄λ―Έ μκ·Όμκ° μλλΌκ³ νλͺ μ΄ λμμΌλ©΄, μ΄νλ λΆνμν κ³μ°μ΄κΈ° λλ¬Έμ -1 κ°μ λ°ν
μκ·ΌμμΈ κ²½μ°λ sumμ΄ 1μΌ λμ΄λ€. μκ·Όμκ° λ§μΌλ©΄ 1μ λ°ννμ¬ μκ·Όμκ° μλ κ²½μ°μ λμΌνκ² λ§λ κ²½μ°μ μ«μλ€μ 1μ κ°μ λ£μ΄μ€λ€
β λ¬Έμ νμ΄ κ²°κ³Ό
