結果
| 問題 | No.1664 Unstable f(n) | 
| コンテスト | |
| ユーザー |  merlin | 
| 提出日時 | 2021-09-03 21:51:49 | 
| 言語 | Java (openjdk 23) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 92 ms / 2,000 ms | 
| コード長 | 1,875 bytes | 
| コンパイル時間 | 3,248 ms | 
| コンパイル使用メモリ | 77,660 KB | 
| 実行使用メモリ | 49,288 KB | 
| 最終ジャッジ日時 | 2024-12-15 12:35:31 | 
| 合計ジャッジ時間 | 7,108 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 38 | 
ソースコード
import java.io.*;
import java.math.BigInteger;
import java.util.*;
class Main
{
    public static void main(String args[])throws Exception
    {
        BufferedReader bu=new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb=new StringBuilder();
        long n=Long.parseLong(bu.readLine());
        int i; long r=root(n),ans=Math.min(n,r+(n-r*r)+2);
        //System.out.println(ans);
        for(i=3;i<63;i++)
        {
            int j=2;
            if(i<20)
            {
                long ti=power(j,i);
                while(ti<=n)
                {
                    ans=Math.min(ans,n-ti+i+j);
                    j++;
                    ti=power(j,i);
                }
            }
            else
            {
                BigInteger ti=big_power(j,i),en=BigInteger.valueOf(n);
                while(ti.compareTo(en)<=0)
                {
                    ans=Math.min(ans,en.subtract(ti).longValue()+i+j);
                    j++;
                    ti=big_power(j,i);
                }
            }
            //System.out.println(i+" "+j);
        }
        System.out.print(ans);
    }
    static long root(long n)
    {
        long l=1,r=(int)1e9,ans=l,mid;
        while(l<=r)
        {
            mid=(l+r)>>1;
            if(mid*mid<=n)
            {
                ans=mid;
                l=mid+1;
            }
            else r=mid-1;
        }
        return ans;
    }
    static long power(long a,int b)
    {
        long res=1;
        while(b!=0)
        {
            if(b%2==1) res=res*a;
            b>>=1;
            a=a*a;
        }
        return res;
    }
    static BigInteger big_power(int a,int b)
    {
        BigInteger res=new BigInteger("1");
        while(b!=0)
        {
            res=res.multiply(res.valueOf(a));
            b--;
        }
        return res;
    }
}
            
            
            
        