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

来源:互联网 发布:软件质量属性 编辑:程序博客网 时间:2024/06/06 01:35

问题链接: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;}