1. 程式人生 > >一道數論題

一道數論題

給定正整數 \(N\),求同時滿足下列條件的正整數對 \((a,b)\) 的數量:

  • \(a+b \le N\)
  • \(a+b~|~ab\)

對於 \(60 \%\) 的測試點,\(1 \le N \le 10^{7}\)

對於全部測試點,\(1 \le N \le 10^{14}\)

題解

先考慮對每個 \(1 \le x \le N\) 計算滿足 \(a+b=x\) 的數對數量。

\(x~|~a(x-a)\) 時,有 \(x~|~a^{2}\)。考慮 \(x\) 的質因數分解 \(p^{a_1}p^{a_2} \dots p^{a_k}\),令 \(b_i = \lceil {\frac{a_i}{2}} \rceil\)

\(y = p^{b_1}p^{b_2} \dots p^{b_k}\),那麼 \(a\) 一定是 \(y\) 的倍數,於是 \(a\) 的個數即為 \(\frac{x-1}{y}\)。在預處理了最小質因數後,時間複雜度為 \(O(N \log N)\),可以通過 \(60 \%\) 的測試點。

不妨換一種方式計數。令 \(g = \gcd(a, b)\)\(\alpha = \frac{a}{g}\)\(\beta = \frac{b}{g}\),那麼滿足條件的 \((a,b)\)\(\alpha + \beta = \alpha \cdot \beta \cdot g\)。因為 \(\gcd(\alpha, \beta) = 1\)

,容易證明 \(\alpha + \beta~|~g\)。令 \(t = \alpha + \beta\),那麼滿足條件的 \(g\)\(\frac{N}{t^2}\) 個,滿足條件的 \((\alpha, \beta)\)\(t>1\) 時有 \(\varphi(t)\) 對,於是答案即為 \(\sum_{t=2}^{\sqrt{N}}{\frac{N}{t^2} \cdot \varphi(t)}\)。 時間複雜度為 \(O(\sqrt{N})\),可以通過所有測試點。