突發奇想 重推min 25

2022-05-15 13:52:50 字數 1726 閱讀 9862

牢騷和推導

忘記 \(\tt min\_25\) 了,重新推一遍,順便理清思路。

對於乙個函式 \(f(x)\),它是乙個積性函式,並且 \(f(p),f(p^k)\) 都比較好得到,現在問 \(f(i)=\sum_^nf(i)\).

對於 \(f\),我們分質數、合數與 \(1\) 三種情況考慮,就有

\[f(n)=\sum_^f(p_i)+\sum_^f(x)+f(1)

\]對於合數部分,我們改寫一下,有

\[\begin

&\sum_^f(x) \\

=&\sum_^\sum_^f(p_i^k)\left( \sum_(x)>p_i}^\right\rfloor}f(x)+[k\neq1]f(1) \right) \\

\end

\]然後我們定義 \(s(n,j)\) 表示所有 \((1,n]\) 以內的,最小質因數大於\(p_j\) 的數的函式值之和,那麼就有

對於這個 \(s\) 的求值,我們也可以分成質數、合數兩個部分考慮,定義 \(g(i)\) 表示 \([1,i]\) 中質數的函式值之和,那麼有

\[\begin

s(n,j)&=g(n)-g(j)+\sum_^\sum_^f(p_i^k)\left( \sum_(x)>p_i}^\right\rfloor}f(x)+[k\neq1]f(1) \right) \\

&=g(n)-g(j)+\sum_^\sum_^f(p_i^k)\left( s\left(\left\lfloor\right\rfloor,i\right)+[k\neq1]f(1) \right) \\

\end

\]這個東西就可以遞迴做了,但是還有乙個問題:這個 \(g\) 怎麼處理?

定義 \(g(i,j)\) 表示 \([2,i]\) 以內的質數或者最小質因數大於 \(p_i\) 的數的函式值之和,不難發現,有邊界情況

\[g(i,j)=

\begin

\sum_^if(k) &j=0 \\

g(i-1,j) &i

這個 \(g()\) 的遞推過程,我們可以考慮成每一次篩,其實就是將當前最小的質數所擁有的乙個合數篩掉,但是要注意篩這個質數的時候可能會把前面的質數重複篩,這個就要重新加上。至於為什麼這裡是 \(g\left(\left\lfloor\right\rfloor,j-1\right)\) 呢?因為我們是從 \(g(i,j-1)\) 中篩掉的,所以自然這裡也是 \(j-1\) 了。

然後我們一直推進,直到某個時刻 \(p_j=p\)(\(p\) 是 \(\sqrt n\) 以內最大的質因數)時,就有 \(g(n)=g(n,p)\).

最後實現的時候,每個 \(f()\) 拆出來的單獨的一項函式單獨用乙個 \(g()\) 進行計算,並且注意到這個遞推關係是相鄰之間的關係,所以只需要開一維陣列。

一些感悟

重新推了一遍,還花了比較久的時間,但是重新理了一遍思路。

對於 \(g\),我們實際上只是想要 "質數" 的部分,但是無奈不能一次解決,所以就變成了 "質數以及最大質因數大於 \(p_j\) 的數的函式值之和",然後通過每次將 \(p_j\) 變大,逐一篩去一些以質數為基礎的合數,最後得到我們想要的。

對於 \(s\),我們實際上想要的是 \(s(n,0)\),但是無奈這樣的數太多了,我們就只好先定義其為 "最小質因數大於 \(p_j\) 的數的函式值之和",然後每次放低要求,最後得到我們想要的。

也就是說,對於 \(g\) 而言,我們實際上每次在篩掉一些數,對於 \(s\),我們每次都在加入一些數。

突發奇想續

簡單寫了點 把那個方程組生成樹結構 code include include using namespace std enum type enum operator class variable variable const char name variable const variable var...

突發奇想 超越寶馬之後

前面開車的是個女的 一眼瞟到這個情況,我便作出了超車的決定。路上的車不多,前面幾輛車稀疏的併排,但是中間的空隙似乎不足夠進行大刀闊斧的超車動作。但是我終究還是超了 帶著一點點爭強好勝,一點點年輕人的血氣方剛。交通燈就像馬路上的革命者,對車流進行結構重組,對車群進行資源整合 大家又排到了十分相近的起點...

一次突發奇想

今天有個突發奇想 假如 有需要我們 暴力破解 而且必須和程式互動的時候 我們該怎麼辦 這個 有人和我說os 庫 但是 沒有知道怎麼用 我現在沒有解決 windows下的 dos 平台 如果有人知道了 可以在下面一起交流 先說linux 下的怎麼辦 這個 在我以前我也寫過 有用shell 但是如果不想...