
[[/code][/cpp][size=18][/size]
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 100000
#define MAXCHAR 1000
int smith, sum_smith,
prime[MAX], np=0,
ct_fact;
void gen_prime() {
int i,j,flag=1;
prime[np++] = 2; prime[np++] = 3; prime[np++] = 5;
for (i=7; np<10000; i+=2) {
flag = 1;
if (i%2) {
for (j=3; j<=sqrt(i); j+=2) {
if (!(i%j)) {
flag = 0;
break;
}
}
}
if (flag) prime[np++] = i;
}
}
int count_number(int number) {
int count=0, i;
char temp[MAXCHAR];
sprintf (temp, "%u", number);
for (i=0; i<strlen(temp); i++)
count += (temp[i]-48);
return (count);
}
int count_factor(int number) {
int k,count=0;
for (k=0; k<np; k++) {
while (!(number%prime[k])) {
number /= prime[k];
count += count_number(prime[k]);
}
}
if (number > 1)
count += count_number(number);
return (count);
}
void process() {
int j;
for (j=smith; ; j++) {
sum_smith = count_number(j);
ct_fact = count_factor(j);
if (ct_fact == sum_smith) {
printf ("%d\n", j);
break;
}
}
}
int main () {
int n, i;
gen_prime();
scanf ("%d", &n);
for (i=1; i<=n; i++) {
scanf ("%d", &smith);
process();
}
return 0;
}
Thanks.