package com.zhp.减常因子;
public class Josephus {
public static void main(String[] args) {
int total = 41;
int answer = getResult(total);
System.out.println("存活的人是:" +answer);
}
/**
* @param total
* 总人数
*/
public static int getResult(int total) {
int answer = 0;
if (total == 1) {
// 总数只有一个时,存活的是第一个人
return 1;
}
if (total % 2 == 0) {
// 偶数
answer = 2 * getResult(total / 2) - 1;
} else {
// 奇数
answer = 2 * getResult((total - 1) / 2) + 1;
}
return answer;
}
}
package com.zhp.减常因子;
public class RusMul {
public static void main(String[] args) {
int n = 50, m = 65;
int answer = getResult(n, m);
System.out.println(answer);
}
public static int getResult(int n, int m){
int answer = 0;
if(n == 1){
return m;
}
if( n%2 == 0){
//n 是偶数
n = n/2;
m = 2*m;
answer = getResult(n, m);
}else{
//n 是奇数
n = (n - 1)/2;
m = 2*m;
answer = getResult(n, m) + m/2;
}
return answer;
}
}