题意:
一个数分解成质因子相乘,原数的每个位相加等于分解后的数每个为相加的和。
此题就是分解因子+枚举。注意,素数不能算。
#include<stdio.h>
typedef long long LL;
void bitsum(LL n,LL *s)
{
int t;
while(n){
t=n%10;
n/=10;
*s+=t;
}
}
int main()
{
LL num,ans,tmp;
LL sum1,sum2;
bool flag; //flag用于标记一个数是否为素数
while(scanf("%lld",&num),num){
if(num==1) num=2;
while(num++){
sum2=sum1=0;
tmp=num;
ans=num;
flag=0;
bitsum(tmp,&sum1);
while((tmp&1)==0){
tmp>>=1;
sum2+=2;
flag=1;
}
for(LL i=3;i*i<=tmp;i+=2){
while(tmp%i==0){
tmp/=i;
bitsum(i,&sum2);
flag=1;
}
}
if(tmp>1) bitsum(tmp,&sum2);
if(sum1==sum2&&flag){
printf("%lld\n",ans);
break;
}
}
}
}