Java 高可除三角数(ProjectEular)?
三角形数序列是通过添加自然数生成的。所以第七个三角形的数字是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是第一个有超过五个除数的三角形数 第一个有500个以上除数的三角形数的值是多少 我用java编写了这段代码。我没有看到任何错误,但它返回我给count2的任何值。原因是什么Java 高可除三角数(ProjectEular)?,java,Java,三角形数序列是通过添加自然数生成的。所以第七个三角形的数字是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是第一个有超过五个除数的三角形数 第一个有500个以上除数的三角形数的值是多少 我用java编写了这段代码。我没有看到任何错误
public static void main(String[] args) {
System.out.println(number());
}
public static boolean triangle(int number) {
long sum = 0l;
for (int i = 0; i < number; i++) {
sum += i;
if ((((number + 1) * number) / 2) != sum)
return false;
}
return true;
}
public static int triangular(int number) {
int count = 0;
for (int i = 1; i <= number; i++) {
if (number % i == 0) {
count++;
}
}
return count;
}
public static String number() {
int count2 = 1;
while ((triangle(count2) == true) && (triangular(count2) == 501)) {
count2++;
}
return Integer.toString(count2);
}
while循环的条件导致它提前退出。您应该反转条件,以便继续迭代,直到满足这些条件。此外,你得到的数字可能有超过501个因素,因此你应该考虑到这种可能性
while ((triangle(count2) == false) || (triangular(count2) < 501)) {
count2++;
}
正如David Conrad在原始帖子中的评论所提到的,你应该在三角形中把你的三角形数从1加到n,或者只使用
您的方法还可以从使用while循环中获益。while循环的条件会导致它提前退出。您应该反转条件,以便继续迭代,直到满足这些条件。此外,你得到的数字可能有超过501个因素,因此你应该考虑到这种可能性
while ((triangle(count2) == false) || (triangular(count2) < 501)) {
count2++;
}
正如David Conrad在原始帖子中的评论所提到的,你应该在三角形中把你的三角形数从1加到n,或者只使用
使用。三角形不起作用,您的方法也可能从中受益;求和永远不会到达三角形数,因为你从0到n-1求和,而不是从1到n,但是如果你知道计算三角形数的闭合形式,为什么你还要尝试从1到n求和?你计算因子的功能效率很低,在数量上你测试每个数字;为什么不只测试三角形数字?另外,你应该检查超过五百个除数,而不是五百零一个除数。还有,水桶说了什么我认为用蛮力解决这个问题是个坏主意。我打赌有一些简单的方法来计算答案,即使是对于一些非常高的输入数。@Amongalen可能有,但Project Euler中的大多数问题(如果不是所有的话)都需要编程技巧来解决。三角形不起作用;求和永远不会到达三角形数,因为你从0到n-1求和,而不是从1到n,但是如果你知道计算三角形数的闭合形式,为什么你还要尝试从1到n求和?你计算因子的功能效率很低,在数量上你测试每个数字;为什么不只测试三角形数字?另外,你应该检查超过五百个除数,而不是五百零一个除数。还有,水桶说了什么我认为用蛮力解决这个问题是个坏主意。我打赌有一些简单的方法来计算答案,即使是对于一些非常高的输入数。@Amongalen可能有,但Project Euler中的大多数问题(如果不是所有的话)都需要编程技巧来解决。