POJ1142 HDU1333 ZOJ1133 Smith Numbers【质因数分解+素数判定+数位之和】
2017-05-20 18:01
405 查看
问题链接:POJ1142 HDU1333 ZOJ1133 Smith Numbers。
题意简述:寻找大于输入数并且最接近的Smith Numbers。
问题分析:
Smith Numbers数不是素数,其各位数字之和等于其各个因子的各位数字之和。。
程序说明:
函数digitsum()用于计算数的各位数字之和。
函数fact_digitsum用于计算数的各个因子的数字之和,但是若为素数则返回-1。函数中对因子的数量进行了计数,若为1则数为素数。
AC的C++语言程序如下:
题意简述:寻找大于输入数并且最接近的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; }
相关文章推荐
- zoj 1133 || poj 1142 Smith Numbers
- UVALive2203 UVa10042 Smith Numbers【质因数分解+素数判定+数位之和】
- ZOJ 1133 & POJ 1142 Smith Numbers
- ZOJ 1133 Smith Numbers && POJ 1142 Smith Numbers
- ZOJ 1133 Smith Numbers(素数)
- Smith Numbers(Poj1142)(质因数分解+素数判定)
- UVa 10042 && POJ 1142 - Smith Numbers
- POJ 1142 Smith Numbers
- POJ1142 Smith Numbers(分治法)
- POJ 1142 Smith Numbers 笔记
- POJ 3641 Pseudoprime numbers(快速幂+素数判定)
- POJ-----1142---Smith Numbers
- Poj 2662,2909 Goldbach's Conjecture (素数判定)
- POJ 2262 (简单素数判定 ,需要优化)
- poj2262 简单素数判定
- Poj 2662,2909 Goldbach's Conjecture (素数判定)
- POJ1142——Smith Numbers
- ZOJ - 3980 17171771 大素数判定
- poj_1142_Smith Numbers(分解质因子)
- POJ 3641 -- 快速幂运算,素数判定