(HDU 6182)A Math Problem

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44413445/article/details/90201015