bzoj 3209 花神的數論題(組合數學)

2021-08-15 01:55:30 字數 1409 閱讀 8774

傳送門biu~令a

nia ni

代表二進位制中

1 1

的個數為

i' role="presentation" style="position: relative;">i

i的數有多少個。從高位向低位列舉,假設輸入的數

n n

的二進位制第

i' role="presentation" style="position: relative;">ii位為

1 1

,那麼設乙個數

x' role="presentation" style="position: relative;">xx的第

i i

位為0' role="presentation" style="position: relative;">00,前

i−1 i−1

位與n n

相同,那麼無論比

i' role="presentation" style="position: relative;">i

i位低的數字中哪一位為

1 1

,x' role="presentation" style="position: relative;">x

x都不會大於

n n

,所以可以用組合數ci

−1k' role="presentation" style="position: relative;">cki

−1ci

−1k更新答案。

ps:φ

(10000007)=

9988440

φ

(10000007)=

9988440

說得不清楚看**:

#include

using

namespace

std;

const

long

long mod=10000007,phi=9988440;

long

long n,ans=1;

long

long c[51][51],an[51];

int a[51],now,cnt;

inline

void getc()

}inline

long

long ksm(long

long p,long

long n)

return re;

}int main()

for(int i=cnt;i>=1;--i)

for(int i=1;i<=cnt;++i) (ans*=ksm(i,an[i]%phi))%=mod;

printf("%lld",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 花神要...