剩下的就不是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;
}
沒有留言:
張貼留言