可以參考 此部落格 。
我們把 \(\sum\limits^_\sum\limits^_\ (n\mod i)*(m\mod j)\),變成\(\sum\limits^_\ (n\mod i)*\sum\limits^_(m\mod j)\),就有了 \(o(n)\)的方法。
然後 \(n,m \leq 10^9\),顯然超時。
我們再把 \(\sum\limits^_\ (n\mod i)\) 變成 \(\sum\limits^_\ n- \left\lfloor\dfrac\right\rfloor*i\)。
其中的 \(\sum\limits^_\ \left\lfloor\dfrac\right\rfloor\)因為是下取整,所以有很多重複的數字出現。這樣子我們就有了一種 \(o(\sqrt n)\) 的方法(數論分塊)。
按 \(10\) 來說。
\(1\)
\(2\)
\(3\)
\(4\)
\(5\)
\(6\)
\(7\)
\(8\)
\(9\)
\(10\)
\(10\)
\(5\)
\(3\)
\(2\)
\(2\)
\(1\)
\(1\)
\(1\)
\(1\)
\(1\)
每一段的右端點就是 \(\left\lfloor\dfrac\right\rfloor}\right\rfloor\)。也就是 \(n\div(n\div i)\)。
然後每一段再乘以乙個 \(i\) 什麼之類的,最後用 \(n^2\) 減掉就可以了。
const number=1000000007;
var n,m:int64;
function sum(n:longint):int64;
var i,right,num:int64;
begin
sum:=0; i:=1;
while i<=n do
begin
num:=n div i; right:=n div num;
sum:=sum mod number;
inc(sum,num*((i+right)*(right-i+1) div 2));
i:=right+1;
end;
end;
begin
read(n,m);
n:=(((n*n) mod number)-sum(n)) mod number;
m:=(((m*m) mod number)-sum(m)) mod number;
writeln((n*m) mod number);
end.
NOIP提高組模擬 快速荷葉葉變換
我們可以把式子進行拆分,變成 n i 1 nmodi mj 1 m modj 也就是前一半和後一半可以分開計算。假設計算 n i 1 nmodi 列舉出所有情況,發現可以進一步推出公式n2 mi 1 n i i 再推導,發現了對於某乙個i來說,若是 nmodi 0 那麼 nmod i 1 一定等於 ...
快速傅利葉變換 快速數論變換
update 3.29.2017 2月10日初學,記得那時好像是正月十五放假那一天 當時寫了手寫版的筆記 過去近50天差不多忘光了,於是複習一下,具體請看手寫版筆記 參考文獻 picks miskcoo menci 阮一峰 i 表示逆時針旋轉90度 a bi 對應復平面上的向量 複數加法同向量 複數...
快速傅利葉變換
學習快速傅利葉變化是量子計算中的基礎,查了很多資料,以下鏈結可以作為參考 本部落格部分知識學習於 最後這個裡面有解釋蝴蝶效應是怎麼來的!實用數字訊號處理 dft 離散傅利葉變換 o n2 計算多項式乘法 fft 快速傅利葉變換 o n log n 計算多項式乘法 fntt ntt 快速傅利葉變換的優...