題目背景
眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj、oi、cf、tc …… 當然也包括 ch 啦。
題目描述
話說花神這天又來講課了。課後照例有超級難的神題啦…… 我等蒟蒻又遭殃了。 花神的題目是這樣的:設 \text(i)sum(i) 表示 ii 的二進位制表示中 11 的個數。給出乙個正整數 nn ,花神要問你 \prod_^\text(i)∏
i=1n
sum(i) ,也就是 \text(1)\sim\text(n)sum(1)∼sum(n) 的乘積。
輸入格式
乙個正整數 n。
輸出格式
乙個數,答案模 10000007 的值。
輸入輸出樣例
輸入 #1複製
3輸出 #1複製
2說明/提示
對於 100% 的資料,n≤10^15
簡單的數字dp,我們考慮每個出現1出現的次數即可,然後就能計算答案了。
最後快速冪計算每個出現次數求積即可。
ac**:
#pragma gcc optimize(2)
#include
#define int long long
using namespace std;
const
int p=
1e7+7;
int n,a[60]
,cnt,dp[60]
[60][
60],res[60]
;int
dfs(
int pos,
int s,
int d,
int limit)
intqmi
(int a,
int b)
return res;
}int
solve
(int x)
for(
int i=
1;i<=
50&&res[i]
;i++
) ans=ans*
qmi(i,res[i]
)%p;
return ans;
}signed
main()
洛谷P4317 花神的數論題
話說花神這天又來講課了。課後照例有超級難的神題啦 我等蒟蒻又遭殃了。花神的題目是這樣的 設 text i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 花神要問你 prod text i 也就是 text 1 sim text n 的乘積。設 f i 為有 i 個一的方案數。可以用組合...
P4317 花神的數論題 組合數學
定義sum i sum i sum i 表示i ii二進位制下1 11的個數 求 i 1nsu m i prod nsum i i 1 n sum i 考慮計算有i ii個1 11的有多少個數字。對於n nn的每乙個1 11,我們可以知道如果這一位為0 00那麼就可以用組合數學快速計算。所以我們列舉...
洛谷 P4317 花神的數論題(數字dp)
用數字dp計算有 n以內的數字 有k 個 1的數字有多少個,然後快速冪。數字dp 直接在二進位制位上進行列舉。坑點 1e7 7 不是素數,但數字dp 內部無須取模數值不會爆long long include using namespace std typedef long long ll const...