UVA 10042 Smith Numbers 数论
2012-05-26 09:04
281 查看
#include <iostream> #include <cstring> #include <cmath> #include <cstdio> #include <algorithm> #include <queue> using namespace std ; const int MAXN = 40000 ; int prime[MAXN] ; bool isPrime[MAXN] ; int priLen ; int getp[31] ; bool cflag ; void getPrime () //晒素数 { int i, j ; prime[0] = 2 ; priLen = 1 ; for (i = 4; i < MAXN; i += 2) isPrime[i] = true ; for (i = 3; i < MAXN; i += 2) { if (!isPrime[i]) { int tp = 2 * i ; prime[priLen ++] = i ; while (tp < MAXN) { isPrime[tp] = true ; tp += i ; } } } } void judge (int val) { int ans, cnt, i, j, tp, tmp ; if(val < MAXN) //如果没有这一步,输入1,结果输出是2,因为2在这个judge里被分解了 { if(!isPrime[val]) return ; } cnt = 0 ; ans = 0 ; tp = val ; for (i = 0; i < priLen; i ++) { if (prime[i] > val) break ; if (val % prime[i] == 0) { while (val % prime[i] == 0) //求素数各个位数的值 { val /= prime[i] ; tmp = prime[i] ; while (tmp) { cnt += (tmp % 10) ; tmp /= 10 ; } } } } if (val == tp) //本身就是素数,直接返回结果 return ; else if(val != 1) //存在比所筛的素数还更大的素数,那就得把他的每个位上的数值加进去 { while (val) { cnt += (val % 10) ; val /= 10 ; } } while (tp) { ans += (tp % 10) ; tp /= 10 ; } if (ans == cnt) //是Smith number cflag = true ; return ; } int main () { int i, tcase, n ; getPrime () ; scanf("%d",&tcase); while(tcase --) //因为smith number的间隔较小,所以直接暴力求 { scanf("%d",&n); n ++; cflag = false; while(1) { judge(n); if(cflag) break; n ++; } printf("%d\n",n); } return 0 ; }
相关文章推荐
- UVA 10042 Smith Numbers(数论)
- UVA 10042 Smith Numbers(数论)
- UVA 10042 Smith Numbers(数论)
- UVa 10042 - Smith Numbers
- UVa Problem Solution: 10042 - Smith Numbers
- UVa Problem 10042 Smith Numbers (Smith 数)
- UVALive2203 UVa10042 Smith Numbers【质因数分解+素数判定+数位之和】
- UVa 10042 && POJ 1142 - Smith Numbers
- uva 10042 smith numbers
- PC/UVa 110706/10042 Smith Numbers
- [UVA10139]Factovisors(数论,质因数)
- UVA 11246 - K-Multiple Free set (数论/容斥)
- UVA 10061 How many zero's and how many digits ?(数论)
- UVA 1315 - Crazy tea party(数论+推理)
- UVA 10168 Summation of Four Primes(数论)
- uva 10693 - Traffic Volume(数论)
- poj 1142 Smith Numbers(数论:欧拉函数变形)
- UVA 10253 - Series-Parallel Networks(数论+计数问题+递推)
- UVA 11916 Emoogle Grid 数论
- UVA 12716 GCD XOR (数论 gcd和异或不等式)