Project Euler 23
Project Euler 23。何となくCでやってみたけど、やっぱりRubyのような抽象度の高い言語に比べると面倒だ。
#include <stdio.h> #include <stdlib.h> #define NUM 10000 #define LIMIT 28123 int isabundant(int n) { int sum = 0, ptr = 0; for (int i = 1; i <= n / 2; i++) { if ((n % i) == 0) { sum += i; } } if (sum > n) { return 1; } else { return 0; } } int main (int argc, char **argv) { int n = 1, ptr = 0; int sum = 0; int abun[NUM]; int flag[LIMIT]; while (ptr < NUM && n <= LIMIT) { if (isabundant(n)) { abun[ptr++] = n; } n++; } for (int i = 0; i < LIMIT; i++) flag[i] = 0; for (int i = 0; abun[i] <= LIMIT ; i++) { for (int j = 0; abun[j] <= LIMIT; j++) { if (abun[i] + abun[j] > LIMIT) { break; } flag[abun[i] + abun[j]] = 1; } } /* to see how sparse the flagged area for (int i = 0; i < LIMIT; i++) { if (flag[i] == 1) { printf("."); } else { printf(" "); } } */ for (int i = 0; i < LIMIT; i++) { if (flag[i] == 0) sum += i; } printf ("answer: %d\n", sum); return 0; }