为什么我的程序没有按预期运行?
Why does my program not work as expected?
我正在研究 Euler 项目的第十二题。一切都与三角形数字有关;我试图找到第一个除数超过 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;
}
}
程序在运行时给出的输出如下:
The first triangle number to have greater than 500 divisors is: 146611080
在欧拉项目上输入这个数字作为答案,我们可以看到它是错误的。我不知道我的程序哪里出错了...
你查的数字好像不是三角形的。只看代码,检查的第二个数字是2,不是三角数。
尝试将行
i++;
移到行 number+=i;
之前
你的数字必须从 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;
}
我正在研究 Euler 项目的第十二题。一切都与三角形数字有关;我试图找到第一个除数超过 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;
}
}
程序在运行时给出的输出如下:
The first triangle number to have greater than 500 divisors is: 146611080
在欧拉项目上输入这个数字作为答案,我们可以看到它是错误的。我不知道我的程序哪里出错了...
你查的数字好像不是三角形的。只看代码,检查的第二个数字是2,不是三角数。
尝试将行
i++;移到行
number+=i;之前
你的数字必须从 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;
}