1.a A Math Problem

You are given a positive integer n, please count how many positive integers k satisfy  kknkk≤n
InputThere are no more than 50 test cases. 

Each case only contains a positivse integer n in a line. 

1n10181≤n≤1018 
OutputFor each test case, output an integer indicates the number of positive integers k satisfy  kknkk≤n in a line.Sample Input
1
4
Sample Output
1
2

方法一:先打表,再比较

#include<iostream>
using namespace std;
typedef long long LL;
int main(void)
{
    LL a[17];
    for(LL i=1;i<16;i++){
        a[i]=1;
        for(LL j=1;j<=i;j++){
            a[i]*=i;
        }
    }
    LL n;

    while(~scanf("%lld",&n)){
    int ans=0;
    for(int i=1;i<16;i++){
        if(n>=a[i])
            ans++;
        else
            break;
    }
    cout<<ans<<endl;
}
return 0;
}

方法二:快速幂

#include<iostream>
using namespace std;
typedef long long LL;
LL powermod(LL a,LL n){
    LL res=1;
    while(n){
        if(n&1){
            res*=a;
        }
        a*=a;
        n>>=1;
    }
    return res;
}
int main(){
    LL n,a[16],ans;
    for(LL i=1;i<=15;i++){
        a[i]=powermod(i,i);
    }


    while(~scanf("%lld",&n)){
       ans=0;
       for(LL i=1;i<=15;i++){
           if(a[i]<=n)
               ans++;
           else
               break;
    }
       printf("%d\n",ans);}
    return 0;}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值