我在设计将整数n表示为整数对(基数,指数)的方法时遇到问题,因此n == base ^ exponent
用于赋值。以下是该方法的合同。 @pre指定 n 必须是什么,@ post定义输出必须是什么。
/**
* Writes a number as a power with maximal exponent.
*
* @param n the number to 'powerize'
* @return power decomposition of {@code n} with maximal exponent
* @throws IllegalArgumentException if precondition violated
* @pre {@code 2 <= n}
* @post {@code n == power(\result) &&
* (\forall int b, int e;
* 2 <= b && 1 <= e && n == b ^ e;
* e <= \result.exponent)}
*/
public static Power powerize(int n){}
Power类只是一个Pair实例。
我已经设法使用一种天真的方法来解决这个问题,我通过用log(n) / log(b)
计算2 <= b <= sqrt(n)
来计算基数和指数的值。但作业描述说我必须制作一个优雅的&amp;有效的方法,我无法找到一种更有效地计算它的方法。
答案 0 :(得分:0)
在咨询了一些书之后,我设计了以下解决方案:
输入int n :
设 p 1 ... p m 是唯一的素数。
然后我们可以将 n 表达为:
然后使用欧几里德算法计算e 1 ... e m 的gcd d 。
然后我们将n表示为:
现在我们有: