The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
Let us list the factors of the first seven triangle numbers:
1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
We can see that 28 is the first triangle number to have over five divisors.
What is the value of the first triangle number to have over five hundred divisors?
#include <iostream>
using namespace std;
int divi(long long a)
{
int res = 0;
for (int i = 1; i <= a; i++)
{
if (a%i == 0)
res++;
}
return res;
}
int main()
{
long long count = 0;
for (int i = 1; i <= 10000000; i++)
{
count += i;
if (divi(count) >= 500)
break;
//cout << i << endl;
}
printf("%lld\n", count);
system("pause");
return 0;
}
虽然能算出结果但是真的好慢。
任何整数都可以质因数分解成 N=p1^a1 * p2^a2 * p3^a3 * ...
则N的因子个数为(a1+1)*(a2+1)*(a3+1)*....
#include <iostream>
#include <map>
using namespace std;
int divi(long long a)
{
int res = 1;
map<int, int> mp;
for (int i = 2; i <= a; i++)
{
while (a != i)
{
if (a%i == 0)
{
mp[i]++;
a = a / i;
}
else
break;
}
}
if (a != 1)
mp[a]++;
map<int, int>::iterator iter = mp.begin();
for (iter = mp.begin(); iter != mp.end(); iter++)
{
//cout << iter->first << " " << iter->second << endl;
res = res*(iter->second + 1);
}
return res;
}
int main()
{
long long count = 0;
for (int i = 1; i <= 10000000; i++)
{
count += i;
if (divi(count) >= 500)
break;
//cout << i << endl;
}
printf("%lld\n", count);
system("pause");
return 0;
}