题目描述:
smith数是指满足下列条件的可分解的整数:
其所有位数上的数字和等于其全部素数因子的数字之和。
例如,9975是smith数,9975=355719,即9975的数字和=因子的数字总和=30.
补充说明一下:根据smith数的定义,素数不是smith数。
输入多组数据,判断输入的数是否为smith数,如果是输出Yes,否则输出No
代码如下:(详细注释)
#include<stdio.h>
int fun(int n);
int smith(int n);
int main(void){
int n,i;
int result[100];//保存结果集
int index=0;
while(1){
scanf("%d",&n);
if(n==0){
break;
}
if(fun(n)==smith(n)){//判断是否是smith数
result[index]=1;
}else{
result[index]=0;
}
index++;
}
for(i=0;i<index;i++){
if(result[i]==1){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}
/*
计算n的质因数之和
*/
int smith(int n){
int start=2;//质数从2开始
int count=0; //保存位数之和
int temp;
while(n>1){
if(n%start==0){//求出质因数
//计算质因数位数之和
count+=fun(start);
n/=start;
}else{
start++;//若start为质因数不进行++ 因为质因数可以相同
}
}
return count;
}
/*
计算n的每位之和
*/
int fun(int n){
int count=0;
while(n>0){
count+=n%10;
n/=10;
}
return count;
}