1. 程式人生 > >Chiaki Sequence Revisited HDU - 6304 lowbit找規律法

Chiaki Sequence Revisited HDU - 6304 lowbit找規律法

otto article ast ati spa span n-1 display number

Problem Description Chiaki is interested in an infinite sequence a1,a2,a3,..., which is defined as follows:
an={1anan1+an1an2n=1,2n3  
Chiaki would like to know the sum of the first n terms of the sequence, i.e. i=1nai. As this number may be very large, Chiaki is only interested in its remainder modulo (109+7
).

Input There are multiple test cases. The first line of input contains an integer T (1T105), indicating the number of test cases. For each test case:
The first line contains an integer n (1n1018).

Output For each test case, output an integer denoting the answer.

Sample Input 10 1 2 3 4 5 6 7 8 9 10

Sample Output 1 2 4 6 9 13 17 21 26 32

思路
先對aiai打表找一下規律會發現每個數字出現的個數有如下的關系
12345678?12131214?
1122314351627184??

思考一下就會發現對於數字ii他出現的個數是ii轉化為二進制後最後一位1在位置,也就是
log2(lowbit(i))+1log2(lowbit(i))+1,我們把這個函數記作f(i)=log2(lowbit(i))+1f(i)=log2(lowbit(i))+1
接下來我們要解決的問題是給你nn如何求出anan,我們記f(i)f(i)的前綴和為g(i)g(i),如果知道了n剛好大於下標為ii的前綴和就可以確定anan是哪一個數了,前綴和g(i)g(i)是一個遞增的函數,所以我們可以用二分的方法求出ii的值,下面的問題是然後求得g(i)g(i)的表達式

關於f(i)f(i)有兩性質
{f(2i+1)=1f(2i)=f(i)+1
{f(2i+1)=1f(2i)=f(i)+1

利用這兩個性質我們可以對g(n)g(n)進行化簡
g(2n)=∑i=12nf(i)
g(2n)=∑i=12nf(i)
=∑i=1nf(2i)+∑i=0n−1f(2i+1)
=∑i=1nf(2i)+∑i=0n−1f(2i+1)

=n+∑i=1n(f(i)+1)
=n+∑i=1n(f(i)+1)

=∑i=1nf(i)+2n
=∑i=1nf(i)+2n

=g(n)+2n
=g(n)+2n
即g(n)=g(n2)+ng(n)=g(n2)+n
也就是說我們如果知道下標ii我們就可以就可以通過遞歸求出前綴和,有了前綴和的求解方式我們就可以通過二分來找出數字nn所對應的anan的值了,也就是第anan項的前綴和
那麽我們找到了anan又如何求出和SnSn呢,我們先觀察函數g(an)g(an)的值
g(an)=11+22+31+43+51+62+71+84+91+102??
12345678910?g(an)=1+2+1+3+1+2+1+4+1+2?

我們已經知道了最後一項也就是anan的值,那我們觀察一下會發現一些等差數列
12436125102071428?91836???∗1∗2∗3
13579?∗126101418?∗2412202836?∗3?

也就是是每個數字出現的個數都符合一個等差數列的關系,設求出的anan的值為xx
那麽每一個等差數列的項數就為x−2i−12i+1x−2i−12i+1,其中ii代表是哪一個數列,那麽我們就可以求得數列的末項然後用等差數列求和公式就可以求出小於anan中出現的數的和了,然後每個序列又有一個出現次數,再乘上這個序列出現的次數就可以得到最後的答案了
註意的是二分答案的時候為了不TLE要在n2n2的附近查找,序列的規律是除第一項之後的數的規律,所以一開始n-1,最後的答案再加上這個1

轉載至 https://blog.csdn.net/V5ZSQ/article/details/82350536

這位大佬寫的真好,膜膜膜膜!!

Chiaki Sequence Revisited HDU - 6304 lowbit找規律法