A - Smith Numbers POJ

While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh University,noticed that the telephone number of his brother-in-law H. Smith had the following peculiar property: The sum of the digits of that number was equal to the sum of the digits of the prime factors of that number. Got it? Smith‘s telephone number was 493-7775. This number can be written as the product of its prime factors in the following way: 
4937775= 3*5*5*65837
The sum of all digits of the telephone number is 4+9+3+7+7+7+5= 42,and the sum of the digits of its prime factors is equally 3+5+5+6+5+8+3+7=42. Wilansky was so amazed by his discovery that he named this kind of numbers after his brother-in-law: Smith numbers. 
As this observation is also true for every prime number, Wilansky decided later that a (simple and unsophisticated) prime number is not worth being a Smith number, so he excluded them from the definition. 
Wilansky published an article about Smith numbers in the Two Year College Mathematics Journal and was able to present a whole collection of different Smith numbers: For example, 9985 is a Smith number and so is 6036. However,Wilansky was not able to find a Smith number that was larger than the telephone number of his brother-in-law. It is your task to find Smith numbers that are larger than 4937775!

Input

The input file consists of a sequence of positive integers, one integer per line. Each integer will have at most 8 digits. The input is terminated by a line containing the number 0.

Output

For every number n > 0 in the input, you are to compute the smallest Smith number which is larger than n,and print it on a line by itself. You can assume that such a number exists.

Sample Input

4937774
0题目大意:给你一个数,求大于这个数字并满足以下条件的最小值:    条件:数字的各个位置加起来与用质数拆分该数字后得到的数字的各个位置之和相等 4937775= 3*5*5*65837暴力模拟就可以啦  首先要知道质数拆分,然后将得到的每个数字的各个位置相加相等。如果与原数字相等的话说明找到啦!
#include<iostream>
#include<cstdio>
using namespace std;

int check(int x){//由于数字范围太大,不能打表,只能这样一步一步来
    for(int i=2;i*i<=x;i++){
        if(x%i==0) return 0;
    }
    return 1;
}

int f2(int x){
    int sum=0;
    while(x){
        sum+=x%10;
        x=x/10;
    }
    return sum;
}
int f(int x){
    int sum=0;
    for(int i=2;i*i<=x;i++){//拆分
        if(x%i==0){
            int ans=0;
            if(i<10)
            {
                while(x%i==0){
                    ans++;
                    x=x/i;
                }
                sum+=i*ans;
            }
            else {
                int s=f2(i);
                while(x%i==0){
                    ans++;
                    x=x/i;
                }
                sum+=s*ans;
            }
        }
    }
    if(x>1) sum+=f2(x);
    return sum;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF&&n){
        for(int i=n+1;;i++){
            if(check(i)==0){
                if(f2(i)==f(i)){
                    printf("%d\n",i);
                    break;
                }

            }
        }
    }
    return 0;
}


原文地址:https://www.cnblogs.com/Accepting/p/11343145.html

时间: 2024-10-12 04:08:44

A - Smith Numbers POJ的相关文章

UVA 10042 Smith Numbers(数论)

Smith Numbers Background While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh University , noticed that the telephone number of his brother-in-law H. Smith had the following peculiar property: The sum of the digits o

Smith Numbers(分解质因数)

Smith Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14173   Accepted: 4838 Description While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh University,noticed that the telephone number of his b

POJ 1142 Smith Numbers(分治法+质因数分解)

http://poj.org/problem?id=1142 题意: 给出一个数n,求大于n的最小数,它满足各位数相加等于该数分解质因数的各位相加. 思路:直接暴力. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <vector> 5 #include <queue> 6 #include <cmath> 7 using nam

Sum of Consecutive Prime Numbers POJ - 2739

Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representations does a given positive integer have? For example, the integer 53 has two representations 5 + 7 + 11 + 13 + 17 and 53. The intege

Ugly Numbers POJ 1338

题目链接: http://poj.org/problem?id=1338 题意 :只有素数因子 2, 3, 5 的数字才成为丑陋数字,现给出一个数字 N , 求在丑陋数字的序列里, 第N个丑陋数字是多少. 一开始想的简单粗暴, 搞个循环去存储丑陋数字了..到最后发现输入N=1500的时候, 压根什么都出不来, 已哭死.. 比赛结束后百度了一下, 才发现自己真的是单细胞生物, 找不到这个规律... ********* 规律如下:    这个丑陋数字集合是通过集合里的每一个数 × 2,× 3,× 5

UVA 10081 Tight numbers(POJ 2537)

直接看代码就OK.思路比较简单.就是注意概率要在转移过程中算出来.不能算成成立的方案书除以总方案数(POJ的这道题可以这么干.数据很水么.另外POJ要用%.5f,%.5lf 会WA.) #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #inclu

hdu 1058 Humble Numbers || poj 1338(dp)

两题都是一样的题目 只是hdu 1058 多了个7 题意:求一个每个数因子仅含2 3 5 7 的 序列 问 第n个数是几 思路: ans[i]=min(min(ans[n2]*2,ans[n3]*3),min(ans[n5]*5,ans[n7]*7)); if(ans[i]==ans[n2]*2) n2++; if(ans[i]==ans[n3]*3) n3++; if(ans[i]==ans[n5]*5) n5++; if(ans[i]==ans[n7]*7) n7++; hdu 1058 #

HackerRank - &quot;Identify Smith Numbers&quot;

I guess the punch line of this one is Sieving for primes. #include <cmath> #include <cstdio> #include <climits> #include <cctype> #include <vector> #include <string> #include <iostream> #include <algorithm>

Greedy:Sum of Consecutive Prime Numbers(POJ 2739)

 素数之和 题目大意:一些整数可以表示成一个连续素数之和,给定一个整数要你找出可以表示这一个整数的连续整数序列的个数 方法:打表,然后用游标卡尺法即可 #include <iostream> #include <functional> #include <algorithm> #define MAX_N 10010 using namespace std; static int primes_set[MAX_N], flag[MAX_N], p_sum; void in