这是一道签到题,别被这个标题吓着……
给定n,mn,m,求有多少个正整数xx,使得xm≤nxm≤n 。
一行两个正整数n,mn,m 。
一个整数表示正整数xx的个数。
1.数学方法
由于题目要求xm≤nxm≤n,我们把这个式子的两边分别开mm次方,得到x≤n−−√mx≤nm 。
这里需要一个概念,就是关于一个整数的分数次方的计算方法,即amn=am−−−√namn=amn 。
该条结论可用于此题,即n−−√m=n1mnm=n1m 。所以此题只要输出n1mn1m即可。这个任务可以用cmathcmath库中的powpow函数完成。
- #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;
- }
联系客服