Smith Number
Time Limit: 1 Sec Memory Limit: 64 MB Submit: 825 Solved: 366
4937774 0
4937775
1 #include<stdio.h> 2 int n ; 3 4 int main () 5 { 6 //freopen ("a.txt" , "r" , stdin ) ; 7 while (~ scanf ("%d" , &n) ) { 8 if (n == 0) 9 break ; 10 while (1) { 11 n ++ ; 12 int x ; 13 int sum = 0 ; 14 int m = n ; 15 while (m) { 16 sum += (m % 10) ; 17 m /= 10 ; 18 } 19 int sum2 = 0 ; 20 m = n ; 21 for (int i = 2 ; i * i <= n ; i++) { 22 if (m % i == 0) { 23 int y = i ; 24 int k = 0 ; 25 while (y) { 26 k += y % 10 ; 27 y /= 10 ; 28 } 29 while (m % i == 0) { 30 sum2 += k ; 31 m /= i ; 32 } 33 } 34 } 35 if (m == n) 36 continue ; 37 if (m != 1) { 38 int y = m ; 39 int k = 0 ; 40 while (y) { 41 k += y % 10 ; 42 y /= 10 ; 43 } 44 sum2 += k ; 45 } 46 47 if (sum2 == sum) { 48 break ; 49 } 50 } 51 printf ("%d\n" , n ) ; 52 } 53 }
在O(sqrt(N))时间内求得n的所有质因数。
注意1.若跳出循环后n除尽,则cnt 不加1 ; 反之 加一。
2.跳出若为本身,则cnt = 0 ;
原文:http://www.cnblogs.com/get-an-AC-everyday/p/4372612.html