Source : ACM ICPC Mid-Central USA 1998 | |||
Time limit : 5 sec | Memory limit : 32 M |
Submitted : 1119, Accepted : 448
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
The number n is called a generator of d(n). In the sequence above, 33 is a generator of 39, 39 is a generator of 51, 51 is a generator of 57, and so on. Some numbers have more than one generator: for example, 101 has two generators, 91 and 100. A number with no generators is a self-number. There are thirteen self-numbers less than 100: 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, and 97.
Write a program to output all positive self-numbers less than or equal 1000000 in increasing order, one per line.
Sample Output
1 3 5 7 9 20 31 42 53 64 | | <-- a lot more numbers | 9903 9914 9925 9927 9938 9949 9960 9971 9982 9993 | | |筛选法。剪下枝就OK
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; bool flag[1000005]; int cal(int n) { int ret=n; while(n) { ret=ret+(n%10); n=n/10; } return ret; } void init() { int i,next; for(i=1;i<=1000000;i++) { if(!flag[i]) { printf("%d\n",i); next=cal(i); while(next<=1000000) { if(flag[next]) break; flag[next]=true; next=cal(next); } } } } int main() { int i; init(); return 0; }