[暴力分治]POJ 1142 Smith Numbers

来源:互联网 发布:php date格式化输出 编辑:程序博客网 时间:2024/06/01 08:32

题目链接 : http://poj.org/problem?id=1142

题目大意 : 给定一个N,求一个大于N的最小的Smith Numbers,Smith Numbers是一个合数,且分解质因数之后上质因子每一位上的数字之和 等于 其本身每一位数字之和

思路 :分解质因数的时间复杂度是log,求一个数各个位数上的数字之和时间复杂度是位数,可以直接暴力,递归写非常美观

code:

#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>using namespace std;#define foru(i, a, b) for (int i=a; i<=b; i++)#define ford(i, a, b) for (int i=a; i>=b; i--)#define N 200#define M 11000int n;bool pri(int x){    foru(i, 2, sqrt(x))        if (x%i == 0) return 0;    return 1;}int sum(int x){    if (! x) return x;    return x%10 + sum(x/10);}int get(int x){    if (pri(x)) return sum(x);    ford(i, sqrt(x), 2)        if (x%i == 0 && pri(i)) return get(i) + get(x/i);}int main(){   // freopen("P.txt", "r", stdin);    while (scanf("%d", &n) != EOF ){        if (! n) break;        while (n ++){            if (!pri(n) && sum(n) == get(n))                break;        }        printf("%d\n", n);    }    return 0;}


0 0
原创粉丝点击