Number 题解

题目描述:

给出一个整数 ,你可以对 进行两种操作。
  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.

PS:代码中的‘yhy’指的不是晏浩洋同学,请大家不要异想天开。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值