本文共 994 字,大约阅读时间需要 3 分钟。
题目链接:
4x + 3 = 2*(2x + 1)
8x + 7 = 3*(2x + 1)从起点开始每次 x 0 x_0 x0 = 2* x 0 x_0 x0 + 1,统计做了多少次2 x 0 x_0 x0 + 1后模1000000007等于0,再把次数分解成若干个3与2的和,3的个数加上2的个数最小,不超过100000。
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x0 = sc.nextInt(); if((x0<<1)+1 == 1000000007){ // 排除x0=500000003时,一个2*x+1就可以整除1000000007,但无法移动到此处 System.out.println("-1"); return; } int count = 0; while (x0 != 0 && count <= 300000) { //最多循环100000次,若每次走的都是8*X+7,相当于2*X+1,走300000次 x0 = ((x0 << 1) + 1) % 1000000007; //计算(x*2+1)% 100000000 count++; } int res = (count + 2) / 3; //如果count%3为0结果就是count/3,count%3为1和2就是count/3+1,这两种情况结果都是(count+2)/3 //int res=(count + 2)/3等价于int res = count%3 == 0 ? count/3 : count/3 + 1 System.out.println(res > 100000 ? -1 : res); }}
转载地址:http://aejwi.baihongyu.com/