整数的幂表示算法题解(包含数值的范围来源依据)

例如将整数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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值