亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

模算法與NTT(有限域DFT)優化

模算法與NTT(有限域DFT)優化

模算法與NTT(有限域DFT)優化我想使用NTT進行快速平方(參見快速大平方計算),但是即使對于非常大的數字,結果也是緩慢的。超過12000位。所以我的問題是:有辦法優化我的NTT變換嗎?我并不打算通過并行(線程)來加快它的速度;這只是低級層。有辦法加速我的模塊運算嗎?這是我的(已經優化的)C+的NTT源代碼(它是完整的,100%工作在C+白化任何需要第三方庫,也應該是線程安全的。請注意,源數組被用作臨時的!,它也不能將數組轉換為自身)。//---------------------------------------------------------------------------class fourier_NTT                                    // Number theoretic transform    {public:    DWORD r,L,p,N;    DWORD W,iW,rN;    fourier_NTT(){ r=0; L=0; p=0; W=0; iW=0; rN=0; }    // main interface    void  NTT(DWORD *dst,DWORD *src,DWORD n=0);               // DWORD dst[n] = fast  NTT(DWORD src[n])    void INTT(DWORD *dst,DWORD *src,DWORD n=0);               // DWORD dst[n] = fast INTT(DWORD src[n])    // Helper functions    bool init(DWORD n);                                       // init r,L,p,W,iW,rN    void  NTT_fast(DWORD *dst,DWORD *src,DWORD n,DWORD w);    // DWORD dst[n] = fast  NTT(DWORD src[n])    // Only for testing    void  NTT_slow(DWORD *dst,DWORD *src,DWORD n,DWORD w);    // DWORD dst[n] = slow  NTT(DWORD src[n])    void INTT_slow(DWORD *dst,DWORD *src,DWORD n,DWORD w);    // DWORD dst[n] = slow INTT(DWORD src[n])    // DWORD arithmetics    DWORD shl(DWORD a);    DWORD shr(DWORD a);    // Modular arithmetics    DWORD mod(DWORD a);    DWORD modadd(DWORD a,DWORD b);    DWORD modsub(DWORD a,DWORD b);    DWORD modmul(DWORD a,DWORD b);    DWORD modpow(DWORD a,DWORD b);    };//---------------------------------------------------------------------------void fourier_NTT:: NTT(DWORD *dst,DWORD *src,DWORD n)    {    if (n>0) init(n);    NTT_fast(dst,src,N,W);//    NTT_slow(dst,src,N,W);    }優化后的一些度量(當前代碼、較低的遞歸參數大小/計數以及更好的模塊化算法):檢查NTTmul和NTTsqr時間(我的優化使它加快了3倍多)。它只有1倍的循環,所以它不是很精確(誤差~10%),但加速比即使現在也是明顯的(通常我會循環它1000倍或更多,但我的NTT太慢了)。你可以自由使用我的代碼.。只需保留我的Nick和/或鏈接到這個頁面的某個地方(rem in code,README.txt,約或諸如此類)。希望能幫上忙.。(我在任何地方都沒有看到用于快速NTT的C+源代碼,所以我不得不自己編寫它)。統一的根測試了所有接受的N,見fourier_NTT::init(DWORD n)功能。
查看完整描述

3 回答

  • 3 回答
  • 1 關注
  • 1023 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號