自学内容网 自学内容网

幂次进近

数学题。

令n-m^k的绝对值最小,即n-m^k=0,此时m=n^(1/k)。

据题意要求,m只能取到正整数,那么,n^(1/k)结果恰为整时,其值即为答案,否则,答案为该值临近的两个整数中的一个,且需要通过计算选出最佳答案(注意题目“最小的正整数m”)。

ans^k可以写快速幂,也可以直接用pow( )来算,因为实际上k的取值不可能太大,最多100+。

#include<bits/stdc++.h>
using namespace std;
#define int long long 
signed main()
{
    int t; cin>>t; 
    while(t--){
        long double n,k; cin>>n>>k;
        int ans=pow(n,1./k);
        if(abs(pow(ans,k)-n)>abs(pow(ans+1,k)-n)) cout<<ans+1<<'\n';
        else cout<<ans<<'\n';
    }
}

注意:

幂运算结果可能会爆long long,此时用快速幂则运算数类型应使用__int128(此类型不能cin、cout),用函数pow()应将参数调成long double

25/1/14


原文地址:https://blog.csdn.net/2301_80828645/article/details/145149782

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!