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范圍內的不多,可以處理好
代碼丟家里系列,下次回家補....
轉載于:https://www.cnblogs.com/absi2011/p/9480280.html
總結
以上是生活随笔為你收集整理的Project Eular 634的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 课时21:函数:lambda表达式
- 下一篇: Cannot connect to d