[Luogu1890]gcd区间
生活随笔
收集整理的這篇文章主要介紹了
[Luogu1890]gcd区间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原題鏈接https://www.luogu.org/problem/show?pid=1890
暴力中的暴力。
對于每一組詢問l..r,我們先循環暴力枚舉l..r中最大值到1,再暴力循環l..r的每一個數,判斷前一重循環能否整除后一重,如果全部都能,則可判定它就是l..r的最大公因數。
時間復雜度\(O(mn*maxnum)\)。如果帶入如果帶入極值,需要執行\(10^{18}\)次。果斷超時。
稍微優化的暴力。
對于每一組詢問,我們循環l..r的每一個數,然后再像這樣:ans=gcd(ans,a[i]);。ans初值為a[l]。
這樣的時間復雜度\(O(mn*logmaxnum)\)。代入極值:\(1000*1000000*30=3*10^{10}\)。還是會超時.
核心代碼:
ans=a[l]; for(int j=l;j<=r;++j)ans=gcd(ans,a[j]);3.動態規劃
設f[i][j]表示a[i..j]的最大公因數,則我們有狀態轉移方程:
\[f[i][j]=gcd(f[i][j-1],a[j])\]
這個方程是十分好推的。初值是這樣的:
\[f[i][i]=a[i]\]
計算dp的時間是\(O(n^2)\),回答詢問要\(O(1)\),共m次詢問,有\(O(n^2+m)\)的總時間復雜度。最多需要執行\(2*10^6\)次。
轉載于:https://www.cnblogs.com/hankeke/p/Luogu1890-gcd.html
總結
以上是生活随笔為你收集整理的[Luogu1890]gcd区间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zabbix3.2安装
- 下一篇: weblogic启动失败案例(root启