题目描述:
给出一个整数 ,你可以对 进行两种操作。
1、将x变成4x+3
2、将x变成8x+7
问,最少通过多少次操作,使得x是1000000007的倍数?
Input
一行,一个整数x(1<=x<=1000000006)。
Output
一行,表示最少的操作步数。保证答案不超过10^5。
Sample Input
【样例输入1】
125000000
【样例输出1】
1
【样例输入2】
281250001
【样例输出2】
2
【样例输入3】
18426114
【样例输出3】
58
【样例输入4】
705616876
【样例输出4】
100000
Sample Output
Data Constraint
Hint
【数据约定】
对于50%的数据,答案不超过10
对于80%的数据,答案不超过1000
对于100%的数据,答案不超过100000
思路:每次*2+1,判断是不是10^9+7的倍数,最后判断处理次数是否为3的倍数,是就输出次数 DIV 3,不是就输出次数 DIV 3+1。
参考程序:
const yhy=1000000007;
var hash:array[0..200000] of boolean;
n,m,i,j,l:longint;
ans:qword;
begin
readln(n);
while n mod yhy<>0 do
begin
inc(ans);
n:=((n mod yhy)*2+1) mod yhy;
end;
if ans mod 3=0 then writeln(ans div 3)
else writeln(ans div 3+1);
end.