题目背景
这是一道签到题,别被这个标题吓着……
题目描述
给定\(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;
}