编写一个程序计算100以内的smith数,smith数的概念: 一个非素数,其各位数之和等于其所有质因数的个位数之和。 例如:4=2*2,4=2+2

/*编写一个程序计算100以内的smith数,smith数的概念:
一个非素数,其各位数之和等于其所有质因数的个位数之和。
例如:4=2*2,4=2+2 
      22=2*11 2+2=2+1+1
      27=3*3*3 2+7=3+3+3
*/
#include <iostream>
using namespace std;

int m=0;//定义全局变量
int a[100],b[10];


bool verdict(int n)   //判断是否是质因数
{
if(n==2)
{
return 1;
}
else if(n>2)
{
         for(int j=2;j<n;j++)
{
      if(n%j==0)
  return 0;        
}
}
return 1;
}
void coutzys(int n,int a[])      //计算出n以内的质数
{
  for(int i=2;i<n;i++)
  {
 if(verdict(i))
 {
 a[m]=i;
 m++;
 }


  }
}


int temp1=0;
void coutadd(int n,int b[],int t)    //对满足条件的n进行各位数求和
{
 if(n/10!=0)
 {
 b[t]=n%10;
 temp1+=b[t];
 coutadd(n/10,b,t+1);
 }
 else
 {
 b[t]=n%10;
 temp1+=b[t];
 
 }


}
int temp=0;
int smith(int n,int t,int n1)
{


if(n>1&&t<m)
{
       if(n%a[t]==0)
  {
    if(n/a[t]!=1)
{
if(verdict(n/a[t]))
{
if(n/a[t]/10!=0)
{
  temp+=a[t]+n/a[t]/10+n/a[t]%10;
}
else
{
  temp+=a[t]+n/a[t];  
}
return temp;
}
else
{
temp=a[t]+temp;
return smith(n/a[t],0,n1);

}


  }
smith(n,t+1,n1);
}
    return 0;
}
void main()
{
    coutzys(100,a);
  for(int k=2;k<100;k++)
  {
    coutadd(k,b,0);
    smith(k,0,k);
if(temp==temp1)
  cout<<k<<endl;
temp=0;
temp1=0;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值