にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

Problem 12

(前略)
では、501 個以上の約数をもつ最初の三角数はいくらか。

Problem 12 - PukiWiki

約数チェックを全探索してるといつまでも終わらなかったので大幅に削減しました。

#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