BZOJ 3209 花神的數論題 數字統計

2022-03-13 10:48:19 字數 1003 閱讀 9719

設 f(x) 為 x 的二進位制表示中 1 的個數。給定 n ,求 ∏ f(i)     (1 <= i <= n) 。

總體思路是列舉每乙個 t ,算出 f(x) = t 的 x 有 y 個,然後將 t^y 算入答案中。

主要的過程是求 y ,也就是**中的 solve(t) 。

詳見**吧,我只能看別人的題解,自己想不出來qaq

注意:wa警告!wa警告!

warning!warning!warning!

在涉及到計算 a^b%p 的計算中,a 可以先 mod p ,但是 b 不可以!!!計算 b 的時候,因為 b 之後要作為指數,所以絕對不能取模!!!!!

在這道題中,組合數不能取模!!!solve() 不能取模!!!因為這些都與指數有關!! 

#include #include #include #include #include #include using namespace std;

typedef long long ll;

const int maxl = 60 + 5;

const ll mod = 10000007;

ll n, ans;

ll c[maxl][maxl];

int l, bit[maxl];

void init_c()

}ll solve(int x)

if (x < 0) break;

} return ret;

}ll pow(ll a, ll b)

b >>= 1;

f *= f;

f %= mod;

} return ret;

}int main()

ans = 1ll;

for (int i = 1; i <= l; ++i)

ans = ans * pow(i, solve(i)) % mod;

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