HDU - 6182 A Math Problem

给定n

问 k ^ k <= n的最大k

注意到n的范围才1e18,考虑枚举k就好了

不用想复杂

import java.math.BigInteger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StreamTokenizer;
import java.math.*;
import java.io.*;
import java.util.Scanner;
import static java.lang.System.out;
import static java.lang.Math.*;


import java.util.*;
import java.math.BigInteger;



public class Main {
    static BigInteger quickPower(BigInteger a, BigInteger b) {
        BigInteger base  = a;
        BigInteger ans = BigInteger.ONE;
        while(b.compareTo(BigInteger.ZERO) > 0){
            if(b .and(BigInteger.ONE).equals(BigInteger.ONE)) ans = ans.multiply(base);
            base = base.multiply(base);
            b = b.divide(BigInteger.valueOf(2));
        }
        return ans;
    }
    public static void main(String[] args) {
       Scanner in = new Scanner (System.in);
       BigInteger n;
       while(in.hasNextBigInteger()){
           n = in.nextBigInteger();
           int cnt = 15;
           for(int i = 15; i >= 1 ;i--){
               if(quickPower(BigInteger.valueOf(i),BigInteger.valueOf(i)).compareTo(n) > 0) cnt--;
               else break;
           }
           System.out.println(cnt);
       }
    }
}

猜你喜欢

转载自www.cnblogs.com/hznumqf/p/13394108.html