import
java.util.*;
class
GFG{
static
int
MAX =
10000
;
static
Vector<Integer> primes =
new
Vector<Integer>();
static
void
sieveSundaram()
{
boolean
[]marked =
new
boolean
[MAX /
2
+
1
];
for
(
int
i =
1
; i <= (Math.sqrt(MAX) -
1
) /
2
; i++)
for
(
int
j = (i * (i +
1
)) <<
1
;
j <= MAX /
2
; j = j +
2
* i +
1
)
marked[j] =
true
;
primes.add(
2
);
for
(
int
i =
1
; i <= MAX /
2
; i++)
if
(marked[i] ==
false
)
primes.add(
2
* i +
1
);
}
static
boolean
isEconomical(
int
n)
{
if
(n ==
1
)
return
false
;
int
original_no = n;
int
sumDigits =
0
;
while
(original_no >
0
) {
sumDigits++;
original_no = original_no /
10
;
}
int
pDigit =
0
, count_exp =
0
, p =
0
;
for
(
int
i =
0
; primes.get(i) <= n /
2
; i++) {
while
(n % primes.get(i) ==
0
)
{
p = primes.get(i);
n = n / p;
count_exp++;
}
while
(p >
0
)
{
pDigit++;
p = p /
10
;
}
while
(count_exp >
1
)
{
pDigit++;
count_exp = count_exp /
10
;
}
}
if
(n !=
1
)
{
while
(n >
0
)
{
pDigit++;
n = n /
10
;
}
}
return
(pDigit < sumDigits);
}
public
static
void
main(String[] args)
{
sieveSundaram();
for
(
int
i =
1
; i <
200
; i++)
if
(isEconomical(i))
System.out.print(i +
" "
);
}
}