UVALive2203 UVa10042 Smith Numbers【质因数分解+素数判定+数位之和】
2017-05-20 18:09
417 查看
Regionals 2000 >> Europe - Mid-Central
Regionals 2000 >> Europe - Northwestern
Regionals 2000 >> Europe - Southwestern
问题链接:UVALive2203 UVa10042 Smith Numbers。
题意简述:寻找大于输入数并且最接近的Smith Numbers。
问题分析:
Smith Numbers数不是素数,其各位数字之和等于其各个因子的各位数字之和。。
程序说明:
该问题与《POJ1142 HDU1333 Smith Numbers【质因数分解+素数判定+数位之和】》是同一个问题,只是输入形式不同
函数digitsum()用于计算数的各位数字之和。
函数fact_digitsum用于计算数的各个因子的数字之和,但是若为素数则返回-1。函数中对因子的数量进行了计数,若为1则数为素数。
相关链接:POJ1142 HDU1333 Smith Numbers【质因数分解+素数判定+数位之和】
AC的C++语言程序如下:
/* UVALive2203 UVa10042 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 t, n;
cin >> t;
while(t--) {
cin >> n;
for(n++; ; n++) {
if(digitsum(n) == fact_digitsum(n)) {
cout << n << endl;
break;
}
}
}
return 0;
}
Regionals 2000 >> Europe - Northwestern
Regionals 2000 >> Europe - Southwestern
问题链接:UVALive2203 UVa10042 Smith Numbers。
题意简述:寻找大于输入数并且最接近的Smith Numbers。
问题分析:
Smith Numbers数不是素数,其各位数字之和等于其各个因子的各位数字之和。。
程序说明:
该问题与《POJ1142 HDU1333 Smith Numbers【质因数分解+素数判定+数位之和】》是同一个问题,只是输入形式不同
函数digitsum()用于计算数的各位数字之和。
函数fact_digitsum用于计算数的各个因子的数字之和,但是若为素数则返回-1。函数中对因子的数量进行了计数,若为1则数为素数。
相关链接:POJ1142 HDU1333 Smith Numbers【质因数分解+素数判定+数位之和】
AC的C++语言程序如下:
/* UVALive2203 UVa10042 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 t, n;
cin >> t;
while(t--) {
cin >> n;
for(n++; ; n++) {
if(digitsum(n) == fact_digitsum(n)) {
cout << n << endl;
break;
}
}
}
return 0;
}
相关文章推荐
- POJ1142 HDU1333 ZOJ1133 Smith Numbers【质因数分解+素数判定+数位之和】
- Smith Numbers(Poj1142)(质因数分解+素数判定)
- PC/UVa 110706/10042 Smith Numbers
- UVALive 6396 Factors 反素数!!
- UVA 10042 Smith Numbers(数论)
- UVALive 5004 Balanced Number && hdu-3967 Zero's Number(数位dp)
- UVALive 3782 Bigger is Better(数位DP + 大数)
- UVa Problem Solution: 10042 - Smith Numbers
- UVa Problem 10042 Smith Numbers (Smith 数)
- UVALive - 6872 Restaurant Ratings 数位dp
- UVA 10042 Smith Numbers(数论)
- UVA 10200 Prime Time (素数判定打表)
- UVALive - 3523 Knights of the Round Table(【点双连通分量】+【二分图判定】)
- [UVALive4864] Bit Counting && 数位DP
- UVA10200 Prime Time【素数判定】
- uva 10042 smith numbers
- UVALive 4998 浅谈欧拉定理优化数位动态规划求解高阶同余方程
- UVALive6050 Primes【素数筛选+前缀和】
- [UVALive3675]Sorted bit sequence && 数位DP
- UVALive - 6575 Odd and Even Zeroes 数位dp+找规律