Luogu P6685 可持久化动态仙人掌的直径问题

题目背景

这是一道签到题,别被这个标题吓着……

题目描述

给定\(n,m\),求有多少个正整数\(x\),使得\(x^m\leq n\)

输入格式

一行两个正整数\(n,m\)

输出格式

一个整数表示正整数\(x\)的个数。

思路

1.数学方法

由于题目要求\(x^m\leq n\),我们把这个式子的两边分别开\(m\)次方,得到\(x\leq \sqrt[m] n\)

这里需要一个概念,就是关于一个整数的分数次方的计算方法,即\(a^{\frac mn}=\sqrt[n]{a^m}\)

该条结论可用于此题,即\(\sqrt[m]n=n^{\frac 1m}\) 。所以此题只要输出\(n^{\frac 1m}\)即可。这个任务可以用\(cmath\)库中的\(pow\)函数完成。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
int n, m;
inline int read(void){
    int f = 1, x = 0;char ch;
    do{ch = getchar();if(ch=='-')f = -1;} while (ch < '0' || ch > '9');
    do{ x = x * 10 + ch - '0';ch = getchar();} while (ch >= '0' && ch <= '9');
    return f * x;
}
int main(){
    n = read(), m = read();
    printf("%d\n", (int)std::pow(n,(double)1/m));
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ShadowFlowhyc/p/13378270.html
今日推荐