/** 对于一个正整数n,如果它的各位之和等于它的所有质因数的各位之和,
** 则该数被称为Smith数。例如,31257=3*3*23*151,31257 的各位数字之和为
**3+1+2+5+7=18,它的所有质因数的各位数字之和为3+3+2+3+1+5+1=18,因此,
**31257是一个Smith数。编写一个程序判断输入的正整数是不是Smith数。
*/
#include<iostream>
#include<string>
#include<vector> //包含头文件
using namespace std;
int sum(int n); //求一个数的各位之和
int main()
{
vector<string> s; //声明一个string类型的向量
vector<string>::iterator it;//声明迭代器
int n,i;
int t1,t2,t=0;
cin>>n; //输入要分析的数
while(n)
{
int j=n;
t1=sum(n); //保存欲分析的数的各位之和
for(i=2; i<n; )
{
if(n%i==0) //i是n的质数
{
t=t+sum(i);//保存所有质数的各位之和
n=n/10;
}
else
{
++i;
}
}
t2=t+sum(n);
if(t1==t2&&n<j) //是Smith数的判断条件
s.push_back("yes");
else
s.push_back("No");
t=0;
cin>>n;
}
for(it=s.begin(); it<s.end(); ++it) //迭代器指向s向量
{
cout<<(*it)<<endl; //迭代器是一个指针
}
return 0;
}
int sum(int n)
{
int sum=0;
for(; n>0; n=n/10)
{
sum+=n%10;
}
return sum;
}
Smith数
最新推荐文章于 2024-04-14 15:52:44 发布