λ¬Έμ
μ ν λλ²λ 1949λ μΈλ μνμ D.R. Kaprekarκ° μ΄λ¦ λΆμλ€. μμ μ μ nμ λν΄μ d(n)μ nκ³Ό nμ κ° μ리μλ₯Ό λνλ ν¨μλΌκ³ μ μνμ. μλ₯Ό λ€μ΄, d(75) = 75+7+5 = 87μ΄λ€.
μμ μ μ nμ΄ μ£Όμ΄μ‘μ λ, μ΄ μλ₯Ό μμν΄μ n, d(n), d(d(n)), d(d(d(n))), ...κ³Ό κ°μ 무ν μμ΄μ λ§λ€ μ μλ€.
μλ₯Ό λ€μ΄, 33μΌλ‘ μμνλ€λ©΄ λ€μ μλ 33 + 3 + 3 = 39μ΄κ³ , κ·Έ λ€μ μλ 39 + 3 + 9 = 51, λ€μ μλ 51 + 5 + 1 = 57μ΄λ€. μ΄λ°μμΌλ‘ λ€μκ³Ό κ°μ μμ΄μ λ§λ€ μ μλ€.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
nμ d(n)μ μμ±μλΌκ³ νλ€. μμ μμ΄μμ 33μ 39μ μμ±μμ΄κ³ , 39λ 51μ μμ±μ, 51μ 57μ μμ±μμ΄λ€. μμ±μκ° ν κ°λ³΄λ€ λ§μ κ²½μ°λ μλ€. μλ₯Ό λ€μ΄, 101μ μμ±μκ° 2κ°(91κ³Ό 100) μλ€.
μμ±μκ° μλ μ«μλ₯Ό μ ν λλ²λΌκ³ νλ€. 100λ³΄λ€ μμ μ ν λλ²λ μ΄ 13κ°κ° μλ€. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000λ³΄λ€ μκ±°λ κ°μ μ ν λλ²λ₯Ό ν μ€μ νλμ© μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
μ λ ₯μ μλ€.
μΆλ ₯
10,000λ³΄λ€ μκ±°λ κ°μ μ ν λλ²λ₯Ό ν μ€μ νλμ© μ¦κ°νλ μμλ‘ μΆλ ₯νλ€.
μμ μ λ ₯
μμ μΆλ ₯
1
3
5
7
9
20
31
42
53
64
| | <-- a lot more numbers |
9903
9914
9925
9927
9938
9949
9960
9971
9982
9993
νμ΄
1. 1λΆν° 10000 μ¬μ΄μ μ μ€μ κ° μ리μλ₯Ό λν κ°μ λͺ¨λ μμ±μκ° μ‘΄μ¬νλ€.
λ°λΌμ 1λΆν° 10000 μ¬μ΄μ μ μ€ κ° μ리 μλ₯Ό λν κ°μ΄ μλ μλ€μ μμ±μκ° μ‘΄μ¬νμ§ μλ μ μΌ κ²μ΄λ€.
2. κ° μ리μλ₯Ό λͺ¨λ λν΄ λ¦¬ν΄ν΄μ£Όλ int d(int a)λ₯Ό μμ±
3. μμ±μ μ¬λΆλ₯Ό μ μ₯ν boolean[10000] array λ°°μ΄μ μμ±νλ€. boolean λ°°μ΄μ λν΄νΈκ°μ false.
4. for(int i = 1; i < 10001; i++)
4-1. d(i)κ° 10000μ λλμ§ κ²μ¬ν ν (1 - 10000 κΉμ§μ μλ§ μμ±μ μ¬λΆλ₯Ό κ²μ¬νκΈ° λλ¬Έ)
4-2. 10000 μ΄νμ μλ§ trueλ‘ λ³κ²½
5. λ°°μ΄μ΄ false μΈ i κ°λ§ μΆλ ₯
public class B4673 {
public static void main(String[] args) {
boolean[] array = new boolean[10001];
for(int i = 1; i < 10001; i++) {
int num = d(i);
if(num < 10001) {
array[num] = true;
}
}
for(int i = 1; i < 10001; i++ ) {
if(array[i] == false) {
System.out.println(i);
}
}
}
public static int d(int a) {
int result = a + a % 10 + a % 100 / 10 + a % 1000 / 100 + a % 10000 / 1000;
return result;
}
}