#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// this is a program to find the first triangular number that is divisible by 500 factors
int main()
{
long long int b = 0; // limit for triangular num (1+2+3+......+b)
long long int d; // divisor
long long int t = 0; // triangular number in use
long long int r = 0; // root of current test number
int f = 0; // factor counter
while (f <= 500)
{
f = 0;
// next triangular number
t += ++b;
// get closest root.
// counts factors
for( d = 1 ; d < r; ++d )
{
if( t % d == 0 )
f += 2;
}
if (t % r == 0)
++f;
}
printf("%lld is the first triangular number with more than 500 factors\n", t
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KCi8vIHRoaXMgaXMgYSBwcm9ncmFtIHRvIGZpbmQgdGhlIGZpcnN0IHRyaWFuZ3VsYXIgbnVtYmVyIHRoYXQgaXMgZGl2aXNpYmxlIGJ5IDUwMCBmYWN0b3JzCgppbnQgbWFpbigpCnsKICAgIGxvbmcgbG9uZyBpbnQgYiA9IDA7ICAgICAgICAvLyBsaW1pdCBmb3IgdHJpYW5ndWxhciBudW0gKDErMiszKy4uLi4uLitiKQogICAgbG9uZyBsb25nIGludCBkOyAgICAgICAgICAgIC8vIGRpdmlzb3IKICAgIGxvbmcgbG9uZyBpbnQgdCA9IDA7ICAgICAgICAvLyB0cmlhbmd1bGFyIG51bWJlciBpbiB1c2UKICAgIGxvbmcgbG9uZyBpbnQgciA9IDA7ICAgICAgICAvLyByb290IG9mIGN1cnJlbnQgdGVzdCBudW1iZXIKICAgIGludCBmID0gMDsgICAgICAgICAgICAgICAgICAvLyBmYWN0b3IgY291bnRlcgoKICAgIHdoaWxlIChmIDw9IDUwMCkKICAgIHsKICAgICAgICBmID0gMDsKICAgICAgICAKICAgICAgICAvLyBuZXh0IHRyaWFuZ3VsYXIgbnVtYmVyCiAgICAgICAgdCArPSArK2I7CiAgICAgICAgCiAgICAgICAgLy8gZ2V0IGNsb3Nlc3Qgcm9vdC4KICAgICAgICByID0gZmxvb3Ioc3FydCh0KSk7CiAgICAgICAgCiAgICAgICAgLy8gY291bnRzIGZhY3RvcnMKICAgICAgICBmb3IoIGQgPSAxIDsgZCA8IHI7ICsrZCApCiAgICAgICAgewogICAgICAgICAgICBpZiggdCAlIGQgPT0gMCApCiAgICAgICAgICAgICAgICBmICs9IDI7CiAgICAgICAgfQogICAgICAgIGlmICh0ICUgciA9PSAwKQogICAgICAgICAgICArK2Y7CiAgICB9CiAgICAKICAgIHByaW50ZigiJWxsZCBpcyB0aGUgZmlyc3QgdHJpYW5ndWxhciBudW1iZXIgd2l0aCBtb3JlIHRoYW4gNTAwIGZhY3RvcnNcbiIsIHQpOwogICAgcmV0dXJuIDA7Cn0=