Problem Statement
Consider all non-negative integers written in binary.
In this problem we'll call a non-negative integer good if its binary representation doesn't contain two consecutive ones. For example, 0, 2, 5, 10, 16 and 41 are good (in binary they are 0, 10, 101, 10000, 101001) while 3, 6, 11 are bad (in binary: 11, 110, 1011).
Let's take all good non-negative integers in order and let's concatenate their binary representations to get an infinite binary string S. The first few of these representations are 0, 1, 10, 100, 101, 1000, 1001, 1010 and thus the string begins S = 0110100101100010011010...
You are given the
Definition
- Class:
- SparseOnes
- Method:
- count
- Parameters:
- long, long
- Returns:
- long
- Method signature:
- long count(long A, long B)
- (be sure your method is public)
Notes
- The substring S[x:y] contains of characters whose 0-based indices lie in the half-open interval [x,y).
Constraints
- 0 <= A < B <= 10^14.
Examples
0
22
Returns: 10
S[0:22] is the prefix shown in the problem statement: "0110100101100010011010". It contains 10 ones (and 12 zeros).
1
22
Returns: 10
S[1:22] is "110100101100010011010" (the same as previous example, except for the initial zero). It still contains 10 ones.
5
21
Returns: 7
S[5:21] is "0010110001001101".
0
100000000000000
Returns: 28502454998808
0
1
Returns: 0
0
36
Returns: 15
0
122
Returns: 45
0
863
Returns: 291
1
29
Returns: 12
1
70
Returns: 27
1
68
Returns: 26
2
4
Returns: 1
2
33
Returns: 13
2
262
Returns: 92
3
62
Returns: 22
3
14
Returns: 4
3
442
Returns: 150
4
193
Returns: 70
4
5
Returns: 1
4
57
Returns: 20
5
361
Returns: 128
5
13
Returns: 3
5
11
Returns: 3
6
9
Returns: 1
6
910
Returns: 302
6
391
Returns: 135
7
9
Returns: 1
7
52
Returns: 18
7
163
Returns: 57
8
117
Returns: 40
8
31
Returns: 8
8
397
Returns: 135
9
43
Returns: 14
9
216
Returns: 74
9
925
Returns: 307
31094702574474
73099184643215
Returns: 11950244039897
16035717147238
53460347362137
Returns: 10753276555698
35624543524973
84941406479794
Returns: 14156610984522
2136505223538
21000491886805
Returns: 5392347278430
23970131422335
88263927248246
Returns: 18454882223604
10497255591190
71950433529840
Returns: 17515722768443
67063968125074
87612233235939
Returns: 6018675913407
51451284182047
85538711181209
Returns: 9767496823322
85657299996167
89836577598124
Returns: 1159798022297
29743692285830
81192157255244
Returns: 14698076812085
25897329037639
60745208372917
Returns: 9933369397728
27964192610880
66117485378403
Returns: 10866282220008
13847523786770
80168936573125
Returns: 18947980492520
15210164371266
74222807547265
Returns: 16864052523328
62475740464810
91847877565853
Returns: 8441897631968
51965097783734
58274641872217
Returns: 1732374458903
19761323651422
37185915847401
Returns: 4936520718678
28310238204991
69624906047908
Returns: 11750694154322
63838367843802
79845862700013
Returns: 4616759104320
24644839508091
97813628094416
Returns: 20848212535329
21190663288555
76484441985389
Returns: 15772530467783
6570729117460
89439852142361
Returns: 23716386128971
53300807146298
87548087400379
Returns: 9820952021171
3122970140800
42602161094738
Returns: 11255929149821
43299918333263
86222495471036
Returns: 12361621792198
21279565307967
81593855645996
Returns: 17244595830824
38443231901147
80341613757979
Returns: 11994561391747
48234592653856
79229608326753
Returns: 8847087969259
7342489351551
16131696316105
Returns: 2500571352317
58778403319624
79419540839231
Returns: 5917067224202
50000000000000
100000000000000
Returns: 14189298752323
5
100000000000000
Returns: 28502454998805
1000000000000
100000000000000
Returns: 28214585435847