您的位置:首页 > 其它

POJ1142 HDU1333 ZOJ1133 Smith Numbers【质因数分解+素数判定+数位之和】

2017-05-20 18:01 405 查看
问题链接POJ1142 HDU1333 ZOJ1133 Smith Numbers

题意简述:寻找大于输入数并且最接近的Smith Numbers。

问题分析

Smith Numbers数不是素数,其各位数字之和等于其各个因子的各位数字之和。。

程序说明

函数digitsum()用于计算数的各位数字之和。

函数fact_digitsum用于计算数的各个因子的数字之和,但是若为素数则返回-1。函数中对因子的数量进行了计数,若为1则数为素数。

AC的C++语言程序如下:

/* POJ1142 HDU1333 ZOJ1133 Smith Numbers */

#include <iostream>

using namespace std;

const int BASE10 = 10;

inline int digitsum(int n)
{
int sum = 0;
while(n) {
sum += n % BASE10;
n /= BASE10;
}
return sum;
}

int fact_digitsum(int n)
{
int digitsum2 = 0, count = 0;
for(int i=2; i*i<=n; i++) {
while(n % i == 0) {
count++;
digitsum2 += digitsum(i);
n /= i;
}
}
if(n > 1 && count)
digitsum2 += digitsum(n);
if(count == 0)
digitsum2 = -1;

return digitsum2;
}

int main()
{
int n;

while(cin >> n && n) {
for(n++; ; n++) {
if(digitsum(n) == fact_digitsum(n)) {
cout << n << endl;
break;
}
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: