从p + q和pq计算p ^ n + q ^ n

时间:2012-06-03 09:52:24

标签: java

我正在解决SPOJ上的this问题

  

我们要计算((P ^ N)+(Q ^ N)),我们给出    P + Q和P * Q.
      输入:       第一行将包含表示测试用例数的整数T(< = 15)       将在单独的行中为每个测试用例给出三个整数p + q,p * q和n       为每个测试用例输出相应的       在单独的行中输出(p ^ n)+(q ^ n)

过了一段时间我想出了这种复发

p^n + q^n = (p^n-1 + q^n-1)(p+q) - pq(p^n-2 + q^n-2)
and in my code i have
a = p + q and b = p.q

这是我的解决方案

 public Long computeExponential(int n)
  {
    //base cases
    if(n == 0)
    {
      return 1L;
    }
    else if(n == 1)
    {
      return new Long(a);
    }
    else
    {
        return (a * computeExponential(n-1) - b * computeExponential(n-2));
    }

我在给定的测试用例中得到的答案是

2125764
4383653
-3
175099
28160

我派生的公式是错误的吗?

1 个答案:

答案 0 :(得分:1)

不,你的派生方程是正确的。我可以看到你的实现中的一个小错误:

如果n=0p^0 + q^0 = 1 + 1 = 2computeExponential n=0的{​​{1}}会返回1

[edit]为了将来的参考,我觉得非常有用,对于复杂的算法,特别是编写我自己的测试用例,特别是对于基本情况,简单情况和异常值,我已经手动计算了结果,然后首先运行这些来检查我的功能正在做我认为应该做的事情。例如,用n = 0,p = 2,q = 3(即p + q = 5,pq = 6)测试你的方法会很快抛出这个错误。只有当它通过我自己的测试用例后,我才能将其提交给其他测试数据,这些测试数据可能对我有意义,也可能没有。