FZU 2191 完美的數字 簡單數論

2022-05-11 16:11:25 字數 862 閱讀 7201

題目傳送門

大致題意:

定義\(d(x)\)為把\(x\)拆分為\(a*a*b(1\leq a\leq b)\)的方案數。求\(\sum^_ d(x)\)。

\(1\leq a \leq b \leq 10^\)

首先,\([1,n]\)中被\(k\)整除的個數有\(\lfloor \frac \rfloor\)個。

轉換一下題目,就是要求滿足\([a,b]\)中滿足$i^3\leq x $ 且\(i^2 | x\)的\(x\)的個數。

先不管前乙個條件,如果只需要滿足\(i^2|x\)該如何實現?

只需要列舉\(i^2\),並累加\(\lfloor \frac \rfloor\)到答案上。

但因為我們只能快速求得\([1,n]\)中被\(i^2\)整除的數的個數,所以考慮用類似字首和的東西,用\([1,b]\)的答案減去\([1,a-1]\)的答案。

那麼問題轉化為了求\([1,n]\)間滿足條件的個數。那麼就列舉\(1\leq i^2\leq n\)即可。

但由於\(x\)要滿足\(i^3 \leq x\),所以累加的應該是\([i^3,n]\)之間被\(i^2\)整除的數。那麼累加的就改為\(\lfloor \frac\rfloor - \lfloor \frac \rfloor\)。

顯然\(n\)要大於\(i^3\),那麼列舉\(i\)的上界到\(\sqrt[3] n\)即可。

\(10^\)注意longlong。

code:

#include#define ll long long

using namespace std;

ll solve(ll b)

int main()

FZU 2191 完美的數字

fzu 2191 input 輸入兩個整數a,b 1 a b 10 15 output 輸出乙個整數,表示從a到b的所有數字流行度之和。sample input 1 80 sample output 107 思路 對於1 n a a b n b n a a 所有滿足b a 的數字 可得出 a a b...

FZU 2191 完美的數字 數論

傳送門 題型 數論 題意 中文題,不解釋。分析 因為要求x a a b且b a,所以,如果單純計算x的方法數的話,對a列舉到10 5就可以了。對於區間 a,b 列舉 b的數k,完美度為b k a 1 k 這裡,b k k,但是 a 1 k 可能 所以應該表述成 b k max a 1 k i 1 最...

FZU 2191 完美的數字 《數學找規律》

problem 2191 完美的數字 輸入兩個整數a,b 1 a b 10 15 輸出乙個整數,表示從a到b的所有數字流行度之和。1 80 107福州大學第十二屆程式設計競賽 找規律吧,思路 1 80 答案是107 每乙個數都能寫成a a b的形式,那麼a的最大只能取到n的開三次方,所以我們求出所有...