题目
分析
- 设原数为n
- 4n+3= n<<2+3(11)相当于在原数上末尾添加两个一
- 8n+7= n<<3+7(111) 相当于在原数上加三个一
- 所以 我们直接每次加末尾一个一
- 直接枚举到能mo为止
- 记得加1以后还要mo哦
代码
1 #include<iostream>
2 #define mo 1000000007
3 using namespace std;
4 int find(long long x)
5 {
6 int ans=0;
7 while (x)
8 {
9 x-=x&(-x);
10 ans++;
11 }
12 return ans;
13 }
14 int main ()
15 {
16 long long n;
17 cin>>n;
18 int ans=0;
19 int cha=0;
20 while (n%mo!=0)
21 {
22 n<<=1;
23 n+=1;
24 n%=mo;
25 cha++;
26 }
27 if ((cha%3)==1)
28 ans+=cha/3+1;
29 else if ((cha%3)==0)
30 ans+=cha/3;
31 else if ((cha%3)==2)
32 ans+=cha/3+1;
33 cout<<ans;
34 }