描述
當然是這個辣
你得學會高精度數除以低精度數,當然,能用壓位高精最好(親測極限資料壓位高精慢了整整7ms!!!)
俗話說得好,數學上來先打表,於是:
1. 1
2. 12
3. 121
4. 1213
5. 12131
6. 121312
7. 1213121
8. 12131214
9. 121312141
10. 1213121412
11. 12131214121
12. 121312141213
13. 1213121412131
14. 12131214121312
15. 121312141213121
16. 1213121412131215
17. 12131214121312151
18. 121312141213121512
19. 1213121412131215121
20. 12131214121312151213
統計成**,可得:
s eq
iseq_i
seqi
對應的iii1
1,3,5,7,9,11,13,15,17,19
22,6,10,14,18
34,12,2048
516然後,我們σ( ° △ °||| 震驚的發現了,在每個i
ii的質因數分解中,若i=2
k∗n,
(k,n
∈n
)i=2^k*n,(k,n\in\mathbb)
i=2k∗n
,(k,
n∈n)
,那麼seq
i=k+
1seq_i=k+1
seqi=
k+1。
於是,在dou
bl
edouble
double
範圍內,我們是可以用cma
th
cmath
cmat
h的函式log
\log
log來求解。但是這個題的範圍大概是double_max^3
,所以我們可以用long double
高精來解決問題。
就相當於手動模擬一遍log
\log
log的過程,停止的條件是n
nn為奇數(這個時候就不能再除以2了),時間複雜度o
(logn
lgn)
o(\log n\lg n)
o(lognlgn
),可以輕鬆通過本題……
#include
#include
#include
using
namespace std;
#define reg register
struct bignum
inline bignum&
operator=(
const
int&x)
inline
bignum()
inline
bignum
(const
char
*s)inline
bignum
(const
int&x)
inline
void
input()
inline
void
output()
inline bignum operator/(
const
int&x)
const
while
(!ans.a[ans.a[0]
]) ans.a[0]
--;return ans;
}inline
bool
even_number()
}n;//可以省略的高精板子
int x;
inline
void
solve()
intmain()
波動數列 數論推導,dp
題目鏈結 觀察這個數列 1 3 0 2 1 1 2 這個數列中後一項總是比前一項增加2或者減少3,且每一項都為整數。棟棟對這種數列很好奇,他想知道長度為 n 和為 s 而且後一項總是比前一項增加 a 或者減少 b 的整數數列可能有多少種呢?共一行,包含四個整數 n,s,a,b,含義如前面所述。共一行...
數論 洛谷 P1062 數列
給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 3 0,3 1,3 0 3 1,3 2,3 0 3 2,3 1 3 2,3 0 3 1 3 2,請你求出這個序列的第n...
數論出題組比賽用題 數列
思考難度 提高?難度 提高?演算法0 暴力 實際得分 0 演算法1 考慮x y 1x y 1x y 1的情況,顯然有an an 1 an 2a n a a an an 1 an 2 廢話 故 an an 1a n times a an an 1 an an an 1 a n times a n a ...