Problem 12
(前略)
Problem 12 - PukiWiki
では、501 個以上の約数をもつ最初の三角数はいくらか。
約数チェックを全探索してるといつまでも終わらなかったので大幅に削減しました。
#include <stdio.h> #include <math.h> void problem012() { int ans; int term; /* 項の値 */ int term_count; /* 項の番号 */ int i, loop_max, aliquot_num; /* solve this problem here */ term = term_count = 0; while (1) { term_count++; term += term_count; loop_max = floor(sqrt(term)); aliquot_num = 0; for (i=1; i<=loop_max; i++) { if (term % i == 0) { if (term / i == i) { aliquot_num++; } else { aliquot_num+=2; } } } if (aliquot_num >= 501) { ans = term; break; } } printf("%s: answer = %d\n", __FUNCTION__, ans); } int main(int argc, char* argv[]) { problem012(); return 0; }
実行結果
$ ./problem012 problem012: answer = 76576500