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範圍內的很少,能夠處理好
代碼丟家裏系列,下次回家補....