結果
問題 | No.376 立方体のN等分 (2) |
ユーザー |
|
提出日時 | 2016-06-04 23:50:43 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 1,169 ms / 5,000 ms |
コード長 | 2,403 bytes |
コンパイル時間 | 2,653 ms |
コンパイル使用メモリ | 86,144 KB |
実行使用メモリ | 55,300 KB |
最終ジャッジ日時 | 2024-11-06 21:47:11 |
合計ジャッジ時間 | 17,515 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 38 |
ソースコード
package yukicoder;import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class Main{public static void main(String[] args){new Main().solve();}void solve(){Scanner sc=new Scanner(System.in);long N=sc.nextLong();// Prime p=new Prime(N);// ArrayList<Factor> f=p.primeFactorF(N);long min=Long.MAX_VALUE;//10^11//10^3*10^5//i<j<N/(i*j)//i*i*j<N//i*j*j<Nfor(int i=(int)Math.cbrt(N);i>=1;i--){if(N%i==0){for(long j=(long)Math.sqrt(N/i);j>=1;j--){if(((N/i)%j==0)){min=Math.min(min, i-1+j-1+N/(i*j)-1);break;}}}}System.out.println(min+" "+(N-1));}class Prime{long n;ArrayList<Integer> ps=new ArrayList<Integer>();//n:素因数分解したい最大の数Prime(long n){this.n=n;ps=primeList((int)Math.sqrt(n));}boolean[] isPrimeArray(int max){boolean[] isPrime=new boolean[max+1];Arrays.fill(isPrime, true);isPrime[0]=isPrime[1]=false;for(int i=2;i*i<=max;i++){if(isPrime[i]){for(int j=2;j*i<=max;j++){isPrime[j*i]=false;}}}return isPrime;}/** max以下の素数のリストを返す*/ArrayList<Integer> primeList(int max){boolean[] isPrime=isPrimeArray(max);ArrayList<Integer> primeList=new ArrayList<Integer>();for(int i=2;i<=max;i++){if(isPrime[i]){primeList.add(i);}}return primeList;}/** numをprimeListの素数をもとに素因数分解し、因数を* ArrayList<Factor>の形で返す。1は含まれない。* primeListにはnumの平方根以下の素数が含まれていなければならない。**/ArrayList<Factor> primeFactorF(ArrayList<Integer> primeList,long num){ArrayList<Factor> ret=new ArrayList<Factor>();for(int p:primeList){int exp=0;while(num%p==0){num/=p;exp++;}if(exp>0)ret.add(new Factor(p,exp));}if(num>1)ret.add(new Factor(num,1));return ret;}ArrayList<Factor> primeFactorF(long num){ArrayList<Factor> ret=new ArrayList<Factor>();for(int p:ps){int exp=0;while(num%p==0){num/=p;exp++;}if(exp>0)ret.add(new Factor(p,exp));}if(num>1)ret.add(new Factor(num,1));return ret;}}class Factor{long base,exp;Factor(long base,long exp){this.base=base;this.exp=exp;}}}