題目背景
眾所周知,花神多年來憑藉無邊的神力狂虐各大 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) 的乘積。
輸入格式
乙個正整數 nn。
輸出格式
乙個數,答案模 1000000710000007 的值。
輸入輸出樣例
輸入 #1 複製
3輸出 #1 複製
2說明/提示
對於 100%100% 的資料,1\le n\le 10^1≤n≤1015。
列舉所有可能的1的個數,即[1,k](k是n的二進位制位數),這道題不是把數字轉化為十進位制,而是轉化為二進位制,計算出1的個數為fx的數字個數,再通過快速冪計算。
10^15轉化為二進位制大概是50,但是寫**的時候陣列要比50大一點。
注意:dfs求指數的時候不能對mod取模。
#include
#define ll long long
using
namespace std;
const
int n =
1e5+10;
const
int mod =
10000007
;int a[55]
,fx;
ll dp[55]
[55];
ll dfs
(int pos,
int flag,
int sum)if(
!flag&&dp[pos]
[sum]!=-
1)return dp[pos]
[sum]
;int up=flag?a[pos]:1
; ll ans=0;
for(
int i=
0;i<=up;i++)if
(!flag) dp[pos]
[sum]
=ans;
return ans;
}ll poww
(int p,ll q)
return ans;
}ll solve
(ll x)
ll ans=1;
for(
int i=
1;i<=k;i++
)return ans;
}int
main()
洛谷P4317 花神的數論題
話說花神這天又來講課了。課後照例有超級難的神題啦 我等蒟蒻又遭殃了。花神的題目是這樣的 設 text i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 花神要問你 prod text i 也就是 text 1 sim text n 的乘積。設 f i 為有 i 個一的方案數。可以用組合...
洛谷 P4317 花神的數論題(數字dp)
用數字dp計算有 n以內的數字 有k 個 1的數字有多少個,然後快速冪。數字dp 直接在二進位制位上進行列舉。坑點 1e7 7 不是素數,但數字dp 內部無須取模數值不會爆long long include using namespace std typedef long long ll const...
P4317 花神的數論題
題目背景 眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj oi cf tc 當然也包括 ch 啦。題目描述 話說花神這天又來講課了。課後照例有超級難的神題啦 我等蒟蒻又遭殃了。花神的題目是這樣的 設 text i sum i 表示 ii 的二進位制表示中 11 的個數。給出乙個正整數 nn 花神要...