import java.util.*;
/**
* JD3 小东分苹果
* @author d3y1
*/
public class Apples {
/**
* 程序入口
* @param n
* @return
*/
public int getInitial(int n){
int result;
// result = getInitial1(n);
result = getInitial2(n);
return result;
}
/**
* 模拟法
* @param n
* @return
*/
public int getInitial1(int n) {
int result = -1;
for(int i=n+1; i<Integer.MAX_VALUE; i+=n){
int remain = i;
boolean found = true;
for(int j=1; j<=n; j++){
if((remain-1)%n != 0){
found = false;
break;
}else{
remain = (remain-1)*(n-1)/n;
}
}
if(found){
result = i;
break;
}
}
return result;
}
/**
* 数学法: 公式推导
*
* 假设最初这堆苹果有X个
* d-decrease(减少数量t+a) t-take(熊拿走数量) a-abandon(丢弃1个)
* r-remain(剩余数量)
*
* 依次推导:
* 熊1: 减少数量d1 = t1+a1 = (X-1)/n+1, 剩余数量r1 = X-d1 = X-((X-1)/n+1) = (n-1)(X-1)/n
* 熊2: 减少数量d2 = t2+a2 = (r1-1)/n+1 = (n-1)(X+n-1)/n^2, 剩余数量r2 = r1-d2 = (n-1)((n-1)*X-2*n+1)/n^2
* 熊3: 减少数量d3 = t3+a3 = (r2-1)/n+1 = (n-1)^2(X+n-1)/n^3, 剩余数量r3 = r2-d3 = (n-1)((n-1)^2*X-3*n^2+3*n-1)/n^3
* 熊4: 减少数量d4 = t4+a4 = (r3-1)/n+1 = (n-1)^3(X+n-1)/n^4, ...
* ...
* 熊n: 减少数量dn = (n-1)^(n-1)(X+n-1)/n^n, ...
*
* 要想X最小, 则dn也应该最小且为整数, 因为(n-1)^(n-1)与n^n互质, 所以只能是(X+n-1)被n^n整除并且为最小值1
* ((X+n-1)/n^n)_min = 1
* => (X+n-1)_min = n^n
* => X_min = n^n-n+1
*
* @param n
* @return
*/
public int getInitial2(int n) {
int result = (int) Math.pow(n,n)-n+1;
return result;
}
}