A Math Problem
Time limit 1000 ms
Memory limit 32768 kB
OS Windows
You are given a positive integer n, please count how many positive integers k satisfy k^k ≤ n.
-
Input
There are no more than 50 test cases. Each case only contains a positivse integer n in a line. 1 ≤ n ≤ 10^18
-
Output
For each test case, output an integer indicates the number of positive integers k satisfy k^k ≤ n in a line.
-
Sample Input
1 4
-
Sample Output
1 2
你得到一个正整数n,请输出有几个正整数k满足 k^k ≤ n
-
输入
测试用例不超过50个 每种情况只包含一行中的正整数n 1 ≤ ñ ≤ 10^18
-
输出
对于每个测试用例,输出一个整数表示正整数k满足k^k ≤ n的k的数量
-
样例输入
1 4
-
样例输出
1 2
这个题目挺容易看懂,就是因为数字大所以容易超时
但是因为k^k和n无关,所以很容易想到打个表就可以了
10^18 里最大的 k^k就是 15^15
#include <stdio.h>
long long sum[20];
long long Quickpow(int a, int i) {
long long ans = 1, base = a;
while (i != 0) {
if (i & 1 != 0) ans *= base;
base *= base;
i = i >> 1;
}
return ans;
}/*一个快速幂*/
int main(int argc, char const *argv[]) {
int i;
long long n;
for (i = 1; i < 16; i++) {
sum[i] = Quickpow(i, i);
}/*在最开始建个表*/
while (~scanf("%lld", &n)) {
for (i = 1; i < 16; i++) {
if(sum[i] > n) break;
}
printf("%d\n", i - 1);
}
return 0;
}