BZOJ3209 花神的數論題 題解

2021-08-20 01:59:51 字數 2370 閱讀 3677

time limit: 10 sec memory limit: 128 mb

description

背景 眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj、oi、cf、tc …… 當然也包括 ch 啦。

描述 話說花神這天又來講課了。課後照例有超級難的神題啦…… 我等蒟蒻又遭殃了。

花神的題目是這樣的

設 sum(i) 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n ,花神要問你

派(sum(i)),也就是 sum(1)—sum(n) 的乘積。

input

乙個正整數 n。

output

乙個數,答案模 10000007 的值。

sample input

樣例輸入一

sample output

樣例輸出一

hint

對於樣例一,1*1*2=2;

資料範圍與約定

對於 100% 的資料,n≤10^15

source

原創 memphis

一道很水的數學題。

我看了下大佬們寫的題解,全都是用數字dp做的,難道只有我把這道題當數學題嗎?好吧,看來我還是太弱了。

那我就來講講我的思路吧。我們先假設

n n

恰好等於2x

' role="presentation" style="position: relative;">2x2

x,我們會很輕鬆地得到乙個結論∏i

=12x

sum(

i)=∏

i=1x

icix∏i

=12x

sum(

i)=∏

i=1x

icxi

,用o(x

) o(x

)的時間即可求解。

那麼如果n=

2x1+

2x2+

...+

2xk(

x1>x2

>..

.>xk

≥0) n=2

x1+2

x2+.

..+2

xk(x

1>x2

>..

.>xk

≥0

)呢?我們可以先算出

1 1

到2x1

' role="presentation" style="position: relative;">2x1

2x1的答案,再算出2x

1+1 2x1

+1

到2x1+2x22

x1+2

x2

的答案,以此類推,最後乘起來,後者也並不難算,只要把累乘的數的底數+1就行了,所以我們有了最後的式子:當n

=2x1

+2x2

+...

+2xk

(x1>x2

>..

.>xk

≥0) n=2

x1+2

x2+.

..+2

xk(x

1>x2

>..

.>xk

≥0

)時,a

ns=∏

i=1k

(∏j=

1xi(

j+i−

1)cj

xi⋅i

) ans

=∏i=

1k(∏

j=1x

i(j+

i−1)

cxij

·i

)加上預處理組合數和快速冪,時間複雜度:o(

64⋅lo

g22n

) o(64

·log

22n)

。 附上**:

#include

#include

#include

using

namespace

std;

long

long c[61][61];

const

int md=10000007;

long

long n;

int ans=1;

int qmul(int x,long

long p)

int getphi(int x)

}if(tmp>1)x=x*(tmp-1)/tmp;

return x;

}int main()

}int s=0;

scanf("%lld",&n);

for(int i=60;i>=0;i--)

s++;}}

printf("%d",ans);

return

0;}

bzoj3209 花神的數論題

題意 求sum 1 sum 2 sum n 其中sum x 表示x的二進位制表達中1的數量。答案模10 7 7。n 10 15。考慮列舉sum x 的值為t,然後求有多少個不大於n的正整數的二進位制表達恰好有t個1,設這個答案為f t 這一部分可以用數字dp來實現。例如要求解1.12,可以將其分成1...

bzoj 3209 花神的數論題

設 sum i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 求 i 1ns um i 枚下1的個數,那麼題目就轉換成了1 n有多少個數的二進位制有x個一。這就很容易數字dp了。f i j 表示i位第一位為1,共j個一的數的數目,g i j 表示i位第一位為0,共j個一的數的數目。容易...

BZOJ3209 花神的數論題

bzoj3209 花神的數論題 背景眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj oi cf tc 當然也包括 ch 啦。描述話說花神這天又來講課了。課後照例有超級難的神題啦 我等蒟蒻又遭殃了。花神的題目是這樣的 設 sum i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 花神要...