P3743奶牛求幂
问题描述
约翰的奶牛想要快速计算出整数的P(1<=P<=20000)次幂。计算过程中它们只能使用两个存储器,每个存储器可以记录某个结果的值。
它们的第一个工作是初始化存储器的值:一个存底数x,另一个初值为1。
奶牛可以相乘或相除两个存储器中的值,并把结果存在其中某个存储器内,但存储器存的数字必须是整数。比如两个存储器存的数字分别是A和B,你可以做这些运算 AB,AA,B*B,A/B,B/A,A/A,B/B
例如,如果它们想要计算x^31,一种计算方法是:
因此,x^31可以通过6次计算得出。给出要计算的幂次,请你帮奶牛求出最少需要几次计算
输入格式
一个整数P
输出格式
一个整数,表示最少计算次数
样例输入 1
31
样例输出 1
6
样例输入 2
1023
样例输出 2
11
其他都好说,用log2来估价,最重要的是要用gcd剪枝,如果当前搜索到(u,v)这个数对,那么如果n不能被gcd(u,v)整除,那么显然可以return了。证明是显然的。
代码:
1 |
|