项目欧拉45

Pet*_*ter 2 java algorithm

我还不是一个熟练的程序员,但我认为这是一个有趣的问题,我想我会试一试.

三角形,五边形和六边形数字由以下公式生成:

  • 三角形T_(n)= n(n + 1)/ 2 1,3,6,10,15 ......
  • 五角形P_(n)= n(3n-1)/ 2 1,5,12,22,35 ......
  • 六角形H_(n)= n(2n-1)1,6,15,28,45,......

可以证实T_(285)= P_(165)= H_(143)= 40755.

找到下一个三角形和六边形的三角形数字.

是任务描述.

我知道六角形数字是三角形数字的子集,这意味着您只需要找到一个Hn = Pn的数字.但我似乎无法让我的代码工作.我只知道java语言,这就是为什么我在网络上找不到解决方案的原因.无论如何希望有人可以帮忙.这是我的代码

public class NextNumber {

    public NextNumber() {
    next();
    }

    public void next() {


int n = 144;
int i = 165;
int p = i * (3 * i - 1) / 2;
int h = n * (2 * n - 1);
        while(p!=h) {
            n++;
           h = n * (2 * n - 1);

            if (h == p) {
                System.out.println("the next triangular number is" + h);
            } else {
                while (h > p) {
                    i++;
                    p = i * (3 * i - 1) / 2;
                }
                if (h == p) {
                    System.out.println("the next triangular number is" + h); break;
                    }
                 else if (p > h) {
                    System.out.println("bummer");
                }
            }

            }

    }
}
Run Code Online (Sandbox Code Playgroud)

我意识到它可能是一个非常缓慢且无效的代码,但这并不关心我此时我只关心找到下一个数字,即使它需要我的计算机多年.

mar*_*cog 7

我们知道T 285 = P 165 = H 143 = 40755.我们从中开始nt=286,np=166并计算nh=144出相应的三角形,五边形和六边形数字.无论结果数量最小,我们都会提升其n价值.继续这样做,直到所有数字相等并且你有答案.

该算法的Python实现在我的计算机上运行0.1秒.

代码的问题是溢出.虽然答案适合32位int,但临时值会i * (3 * i - 1)在到达答案之前溢出.使用64位long值可修复代码.