先考慮,\(\sum_^x \sum_^x [ij/\gcd(i,j)\le x]\),細節等會處理。
\(\sum_^\sum_^\sum_^[(i,j)=1]\)
其實這一步不用急著將其轉化為 mu 函式,有些時候形如 \(\sum_^x [gcd(d,x)=1]d\) 可以化成尤拉函式的形式。
\(\sum_^\sum_^\sum_^\sum_\mu_d\)
\(\sum_^\sum_^\mu_d\sum_^\sum_^ 1\)
注意原來的 \(ij/\gcd(i,j)\) 現在變成了 \(gcd*i*j*d*d\),而不是 \(gcd*i*j*d\)(如果一步一步看下來確實是這樣),其本質是 \(i,j\) 脫離 \(gcd\) 後就相當於它倆是不是互質已經不會產生影響了。(反正理解不了還是一步步看下來吧)
你會發現這個 \(\mu\) 在中間並沒有什麼特殊性質,然後一般見到的形式都是 \(\mu\) 在最前或最後,綜合以上,我們選擇將 \(\mu\) 提到最前面。
\(\sum_^\mu_d\sum_^\sum_^\sum_^ 1\)
然後看著這個 \(\) 在上界處真的很不爽啊,我第一感覺是討論(等會來看看到底可不可做)。然後使用選擇將其搞下來。
\(\sum_^\mu_d\sum_^\sum_^\sum_^ [gcd*i*j\leqslant x/d^2]\)
\(\sum_^}\mu_d\sum_^\sum_^\sum_^ [gcd*i*j\leqslant x/d^2]\)
然後用某一場 abc(好像是 abc217c)的 trick,\(gcd,i,j\) 的地位相同,所以假設 \(gcd \leqslant i \leqslant j\),然後 \(gcd \leqslant n^\),剩下的兩個數直接 \(\sqrt\) 即可。然後把假設的條件去掉。
一種方法是在列舉的時候算,具體地:
ll f(ll x)
res += (x / i / i - i) * 3 + 1;
} return res;
}
\(x/i/j-j\) 表示 \(i\neq j \neq k\) 個數,所以乘 \(6\),剩下的 \(i \neq j = k\) 乘 \(3\)。
\(i =j\neq k\) 乘 \(3\),然後 \(i=j=k\) 乘 \(1\),其實就是乙個分類討論。
還有一種方法是容斥。不展開了。
所以複雜度是 \(\mathcal (不會證)\),先去學個積分。但是注意現在我們求出來的值並不是答案。
當然還有一種方法是杜教篩。
最小公倍數
最大公倍數最大是兩個數的乘積,兩個數互質 最大公約數是1 幾個數共有的倍數叫做這幾個數的公倍數,其中除0以外最小的乙個公倍數,叫做這幾個數的最小公倍數。記作 a,b 與最小公倍數相對應的概念是最大公約數,a,b的最大公約數記為 a,b 關於最小公倍數與最大公約數,我們有這樣的定理 a,b a,b a...
最小公倍數
問題描述 編寫一函式lcm,求解兩個正整數的最小公倍數。樣例輸入 乙個滿足題目要求的輸入樣例。例 3 5 樣例輸出 與上面樣例對應的輸出。例 15 資料規模和約定 輸入資料中每乙個數的範圍 例 兩個數都小於65536.演算法分析 一般來說,求兩個正整數a b的最小公倍數的演算法思路很簡單,主要分為以...
最小公倍數
求n個數的最小公倍數。輸入 輸入包含多個測試例項,每個測試例項的開始是乙個正整數n 2 n 10 然後是n個正整數。輸出為每組測試資料輸出它們的最小公倍數,每個測試例項的輸出佔一行。你可以假設最後的輸出是乙個32位的整數。樣例輸入 2 4 6 3 2 5 7 樣例輸出 1270 題目 zjgsuto...