例如将整数16化成幂表示可以化成2^4。
题目描述
小红拿到了一个正整数,请你帮小红将其表示为幂(a^b)的形式。
其中a不能够再次化简,最后的形式就是最简形式。
其中输入的整数是一个大于等于2的整数。
注意:这里不考虑x本身的一次幂!!!
算法思路
一个整数x的幂表示其中底最小是2,最大是x的平方根。所以底数可以从x的平方根到2依次遍历一遍。而指数部分最小是2,最大是x的平方根所以指数部分可以从2到x的平方根依次遍历。每次如果底数的指数次幂等于x就打印出来。最后一个就是整数x的幂表示了。
这里为什么底数的范围从x的平方根到2很好理解。但是指数的范围就比较难了。为什么指数的最大只能是x的平方根呢?
假设指数可以是x的平方根+1;那么设底数为a,就有a^(sqrt(x)+1)=x,化简可得a=x^(sqrt(x)/(x+sqrt(x)));
以上分析可得指数最大是x的平方根,当大于x的平方根是底数就会小于2,不符合要求。
源代码
#include <stdio.h>
#include <math.h>
int main() {
int x,a,b,c;
scanf("%d",&x);
printf("%d\n",x);
printf("=%d^1\n",x);
for(a=sqrt(x);a>=2;a--)
{
for(b=2;b<=sqrt(x);b++)
{
c=pow(a,b);
if(c==x)
{
printf("=%d^%d\n",a,b);
}
}
}
return 0;
}