Project Eular 634

n特別大,咱們確定不能枚舉每一個數統計

咱們思考一下思考

9e18 < 22 * (2e6)3枚舉

那麼要枚舉b就好了

咱們枚舉一發b,而後對於全部的b直接統計有多少a(利用sqrt)

唉爲啥我Sample跑出來不對,3e6跑出來爲啥比答案大一點

咱們通過觀察,能夠發現

咱們彷佛重複統計了一些東西

好比

43 * 272 = 93 * 82

那麼咱們怎麼辦?

個人作法是,若是b帶有平方因子,那麼就忽略掉b的任何計算

這樣咱們就統計出全部b不帶平方因子的個數

那麼若是b帶平方因子,爲了避免重複,它只能是一個質數的平方

例如4,9,25是能夠的,8,18,16等都是不行的

咱們能夠化簡,例如163 * a2 = 43 * (8a)2

可是43 * 272 也一樣化簡就會變成這個樣子:

13 * (8*27)2

因此咱們只有43 * 272這種沒有統計,其餘的咱們都統計過了,並且沒有重複的統計過了

那麼這裏我只能容斥來作了,統計有多少個合法的解

由於以前的作法,(2*3)6就被統計了2次,而(2*3*5)6就被統計了3次,這裏就須要容斥處理掉這些

甚至這個4*(2*3)6也被統計了2次,一次是43 * 542,一次是93 * 162

那麼咱們只能用容斥,對於每個東西的6次方作容斥

固然6次方還在n範圍內的很少,能夠處理好

代碼丟家裏系列,下次回家補....

相關文章
相關標籤/搜索