题目描述:
小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等)。小易需要你帮忙计算最少需要使用多少次神秘力量就能吃到贝壳。
解题思路:4*x + 3 是2次2 * x + 1的结果,而8 * x + 7 是三次 2 * x + 1的结果,每次都进行2 * x + 1,最后再统计出来每次执行3次和执行2次的次数的和就是至少的所求、
代码如下:
import java.util.Scanner;
public class Main{
public int MinChance(int x){
if(x % 1000000007 == 0){
return 0;
}
int count = 0;
while (x != 0 && count <= 300000) {
x = ((x << 1) + 1) % 1000000007;
count++;
}
int res = (count + 2) / 3;
return res > 100000 ? -1 : res;
}
public static void main(String[] args) {
Main main = new Main();
Scanner in = new Scanner(System.in);
while(in.hasNextInt()){
int pop = in.nextInt();
int nums = main.MinChance(pop);
System.out.println(nums);
}
}
}