原题如下:
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?
翻译:
自然数的相加可以得到三角数序列 ,所以第七个三角数应该是1 + 2 + 3 + 4 + 5 + 6 + 7 = 28,前十个三角数项应该是:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …
让我们把前七个三角数的因数,列出来:
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
我们可以看到 28 是第一个有超过5个约数的三角数。
那么第一个拥有超过500个约数的三角数是多少?
解题思路:
根据题意,三角数就是差为1有自然数构成的等差数列的和,即三角数=[(i+1)*i]/2,然后对这样的三角数遍历,求出每一个三角数的约束个数,找出第一个约束个数大于500的数,java代码如下:
public class Launcher {
public static void main(String[] args) {
int num=0;
long answer=0L;
for(int i=1;;i++){
answer=((1+i)*i)/2;
num=count(answer);
if(num>500){
System.out.println(answer);
System.exit(0);
}
}
}
public static int count(long i)
{
int count=0;
for(int j=1;j<=Math.sqrt(i);j++){
if(i%j==0){
if(i==Math.sqrt(i)){
count++;
}else{
count+=2;
}
}
}
return count;
}
}