Smith Numbers - PC110706
欢迎访问我的新博客:http://www.milkcu.com/blog/
原文地址:http://www.milkcu.com/blog/archives/uva10042.html
原创:Smith Numbers - PC110706
作者:MilkCu
题目描述
|
![]() |
||||
![]() |
![]() |
![]() |
While skimming his phone directory in 1982, mathematician Albert Wilansky 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:
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 named this type of number after his brother-in-law: the Smith numbers.
As this property is true for every prime number, Wilansky excluded them from the definition. Other Smith numbers include 6,036 and 9,985.
Wilansky was not able to find a Smith number which was larger than the telephone number of his brother-in-law. Can you help him out?
Input
The input consists of several test cases, the number of which you are given in the first line of the input. Each test case consists of one line containing a single positive integer smaller than 109.
Output
For every input value n, compute the smallest Smith number
which is larger than n and print it on a single line. You can assume that such a number exists.
Sample Input
1
4937774
Sample Output
4937775
解题思路
如何找出素因子呢?枚举法。
那每个整数的素因子是否唯一呢?
由算术基本定理可得,每个整数表示成素数乘积的方式只有一种。
Smith数肯定是合数,且满足各个数字之和等于所有素因子的每个数字之和。
注意,素因子中可能出现两个相同的数字。
那样就可以按部就班的做,从给定的数开始遍历,找到满足的数就退出循环。
为什么会超时呢?构建一个装有素数的容器。
为什么答案错误呢?
注意:若临时变量tc不为1,则说明它超出了sqrt(1e9)的范围,但它是质数,仍是该整数的质因子。
代码实现
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v;
int isPrime(int x) {
if(x == 2) {
return 1;
}
int s = ceil(sqrt(x));
for(int i = 2; i <= s; i++) {
if(x % i == 0) {
return 0;
}
}
return 1;
}
void getPrime(void) {
int s = ceil(sqrt(1e9));
for(int i = 2; i <= s; i++) {
if(isPrime(i)) {
v.push_back(i);
}
}
}
int calc(int x) {
int sum = 0;
while(x) {
sum += x % 10;
x /= 10;
}
return sum;
}
int smith(int n) {
int current = n + 1;
while(1) {
//if(find(v.begin(), v.end(), current) != v.end()) {
if(isPrime(current)) {
//zhishu
current++;
continue;
}
int csum = calc(current);
int tc = current;
int tsum = 0;
for(int i = 0; i < v.size(); i++) {
while(tc % v[i] == 0) {
//cout << tc << " " << v[i] << endl;
tc /= v[i];
tsum += calc(v[i]);
}
}
if(tc != 1) {
tsum += calc(tc); //注意!!
}
//cout << current << " " << csum << " " << tsum << endl;
if(tsum == csum) {
return current;
}
//break;
current++;
}
}
void print(int x) {
cout << x << " ";
}
int main(void) {
//cout << isPrime(4937775) << endl;
//cout << calc(4937775) << endl;
int m;
getPrime();
//for_each(v.begin(), v.end(), print);
//cout << endl;
cin >> m;
while(m--) {
int n;
cin >> n;
cout << smith(n) << endl;
}
return 0;
}
(全文完)
本文地址:http://blog.csdn.net/milkcu/article/details/23607205
Smith Numbers - PC110706的更多相关文章
- POJ 1142 Smith Numbers(史密斯数)
Description 题目描述 While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Leh ...
- poj 1142 Smith Numbers
Description While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh U ...
- Smith Numbers POJ - 1142 (暴力+分治)
题意:给定一个N,求一个大于N的最小的Smith Numbers,Smith Numbers是一个合数,且分解质因数之后上质因子每一位上的数字之和 等于 其本身每一位数字之和(别的博客偷的题意) 思路 ...
- POJ 1142:Smith Numbers(分解质因数)
Smith Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submiss ...
- poj1142 Smith Numbers
Poj1142 Smith Numbers Smith Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13854 ...
- UVA 10042 Smith Numbers(数论)
Smith Numbers Background While skimming his phone directory in 1982, Albert Wilansky, a mathematicia ...
- A - Smith Numbers POJ
While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh University,no ...
- Smith Numbers(分解质因数)
Smith Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14173 Accepted: 4838 De ...
- hdu 1333 Smith Numbers
刚开始没看清题意,要找的数一定要是素数 ;}
随机推荐
- XP下类似%windir% %userprofile% 的变量的说明(转)
在一些批处理或者系统技巧操作教程文章中,我们常常会看到一些形如 %windir% 或者 %systemdrive% 的变量.这些变量都代表着什么含义呢?下面小技巧之家为大家整理了在Windows XP ...
- gcd&&lcm
1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中 ...
- 持续集成Jenkins + robot framework + git
Jenkins + robot framework + git持续集成 一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Git Client Plugin.GIT plugi ...
- WebAPI 和 WebService的区别
webapi用的是http协议,webservice用的是soap协议 webapi无状态,相对webservice更轻量级.webapi支持如get,post等http操作 http soap关系 ...
- linux高级技巧:rsync同步(一个)
1.rsync基本介绍 rsync这是Unix下的一款应用软件,它能同步更新两处计算机的文件与文件夹,并适当利用差分编码以降低数据传输.rsync中一项与其它大部分类似程序或协议中所未 ...
- hdu4324 Triangle LOVE (拓扑排序)
这是一道最简单的拓扑排序题,好久没看这个算法了! 有点生疏了! 后附上百度的资料; #include<stdio.h> #include<string.h> int in[50 ...
- Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds解
产生了一个解决这个问题的方法是在项目部署到tomcat比长45第二,当项目是比较大的,框架复杂的问题经常发生. 解决方法非常easy,找到以下这个路径中 workspace\.metadata\.pl ...
- MacOS10.9平台配置Appium+Java环境
1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- Struts2.0+Spring3+Hibernate3(SSH~Demo)
Struts2.0+Spring3+Hibernate3(SSH~Demo) 前言:整理一些集成框架,发现网上都是一些半成品,都是共享一部分出来(确实让人很纠结),这是整理了一份SSH的测试案例,完全 ...
- Codeforces #180 div2 C Parity Game
// Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...



