本文主要是介绍hdu-1333 Smith Number,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include<iostream>
using namespace std;const int MAXN = 1e4 + 100;
int plist[MAXN];
int pcount = 0;
//判断一个数是否是质数
bool prime(int n)
{int i;if( (n!=2 && !(n%2)) || (n!=3 && !(n%3)) || (n!=5 && !(n%5)) || (n!=7 && !(n%7))) return 0;for(i=0;plist[i]*plist[i]<=n;i++)if(!(n%plist[i])) return 0;return n>1;
}void initprime()
{int i;for(plist[ pcount++ ] = 2, i = 3; i < 50000; i++)if(prime(i)) plist[pcount++] = i;
}int Resolve_Number( int n )
{int ret = 0;while( n != 0 ){ret += n % 10;n /= 10;}return ret;
}int Sum_Factors( int n )
{int ret = 0;int i;for(int i = 2; i * i <= n; i++)if(n % i == 0){//cout<<"-----i="<<i<<" n="<<n<<endl;n /= i, ret += Resolve_Number(i);while(n % i == 0) { n /= i, ret += Resolve_Number(i);}//cout<<"-----i="<<i<<" n="<<n<<endl;}}if(n>1) ret += Resolve_Number(n);return ret;
}int main()
{//cout<<Resolve_Number(4937775)<<endl;//cout<<Sum_Factors(4937775)<<endl;initprime();int n;while(cin >> n && n){while(n++){if(!prime(n) && Sum_Factors(n) == Resolve_Number(n)) { cout << n << endl; break; }}}return 0;
}
所需知识:筛选素数+用素数表打印素数+求因子和(和求欧拉数相似)
这篇关于hdu-1333 Smith Number的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!