BZOJ 3209 花神的數論題 數字DP 數論

2021-12-29 23:49:44 字數 787 閱讀 8369

題目大意:令sum(i)為i在二進位制下1的個數 求∏(1<=i<=n)sum(i)

一道很簡單的數字dp 首先我們打表打出組合數 然後利用數字dp統計出二進位制下1的個數為x的數的數量 最後輸出∏(1<=x<=logn)x^ans[x]即可

此題的坑在於這題的組合數和數字dp的結果都是指數 對指數取模不能直接取 要取phi(p)

於是我們對10000006取模 然後這題就wa了 因為10000007不是個質數

10000007=941*10627 於是我們得到phi(p)=940*10626=9988440 對這個數取模即可

其實不取模就可以,一定不會爆long long的。。。我是何必呢這是。。。

#include

#include

#include

#include

#define m 10000007

#define phi_m 9988440

using namespace std;

typedef long long ll;

ll n,f[60][60],ans[60],output=1;

void digital_dp(ll x)

return re;

}int main()

cin>>n;

digital_dp(n+1);

for(i=1;i<=55;i++)

output*=quick_power(i,ans[i]),output%=m;

cout<

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 花神要...