我正在研究Euler项目中的第12个问题。这完全是关于三角形数字;我试图找到超过500除数的第一个三角形数字。我写了一个程序来找到这个,然而,它没有给我正确的答案,我不明白为什么。我在下面提供了我的代码:
public class problemTwelve {
public static void main(String [] args) {
int i = 1;
int number = 1;
while(getDivisors(number) < 500) {
number += i;
i++;
}
System.out.println("The first triangle number to have greater than 500 divisors is: " + number);
}
private static int getDivisors(int triangleNum) {
int noOfDivisors = 0;
int numToTest = (int) Math.sqrt(triangleNum);
for(int i = 1; i <= numToTest; i++) {
if((triangleNum % i) == 0) {
noOfDivisors += 2;
}
}
if((numToTest * numToTest) == triangleNum) {
noOfDivisors--;
}
return noOfDivisors;
}
}
程序运行时给出的输出如下:
具有大于500除数的第一个三角形数字是:146611080
输入此数字作为项目Euler的答案,我们可以看出它是错误的。我不知道我的课程在哪里出错...
答案 0 :(得分:1)
您检查的数字似乎不是三角形。在查看代码时,检查的第二个数字是2,这不是三角形数字。
尝试在行
i++;
之前移动
number+=i;行
答案 1 :(得分:0)
你必须从0开始你的数字而不是1,这是正确的代码:
int i = 1;
int number = 0;
while(getDivisors(number) < 500) {
number += i;
i++;
}
System.out.println("The first triangle number to have greater than 500 divisors is: " + number);
}
private static int getDivisors(int triangleNum) {
int noOfDivisors = 0;
int numToTest = (int) Math.sqrt(triangleNum);
for(int i = 1; i <= numToTest; i++) {
if(triangleNum % i == 0) {
noOfDivisors += 2;
}
}
if((numToTest * numToTest) == triangleNum) {
noOfDivisors--;
}
return noOfDivisors;
}