剩下的就不是generator。
用一個array做mark的動作。
/* ACM 640 Self Numbers * mythnc * 2011/12/10 20:41:52 * run time: 0.08 */ #include <stdio.h> #define MAXN 1000001 #define TRUE 1 #define FALSE 0 int sumd(int); int mark[MAXN]; int main(void) { int i, sum; for (i = 1; i < MAXN; i++) if (!mark[i]) { sum = sumd(i); while (sum < MAXN && !mark[sum]) { mark[sum] = TRUE; sum = sumd(sum); } } /* output */ for (i = 1; i < MAXN; i++) if (!mark[i]) printf("%d\n", i); return 0; } /* sumd: do d(n) and return the value */ int sumd(int n) { int sum; for (sum = n; n; n /= 10) sum += n % 10; return sum; }
沒有留言:
張貼留言