十進制快速冪


例題(NOI送分題):

求Fi數列的第n項

n<=10的一百萬次方


首先,這題很明顯是矩陣快速冪,之前的POJ的一個博客里也提到過Fi的第i項,不過n的范圍很小,直接用二進制快速冪就可以解決,但是這道題中二進制是肯定解決不了的,所以需要用到十進制快速冪。

一開始做這道題可能很難想到用到十進制快速冪,但是如果對二進制快速冪有十分深刻的理解的話,還是可以寫出來的。

我們已知二進制快速冪是通過把冪看作二進制數來處理的,所以我們更可以把冪數當做十進制數處理(廢話)。

只需把二進制快速冪簡單地改幾個數就可以了,先上二進制的:

int pow(int a,int b)
{
    int ans=1;
    while(b)
    {
        if(b&1)
        ans*=a;
        a*=a;
        b>>=1
    }
    return ans;
}

然后是十進制的:

int pow(int a,int b)
{
    int ans=1;
    while(b)
    {
        int p=b%10,l=a;
        if(p)
        for(int i=1;i<=p;i++)
        ans*=a;
        for(int i=1;i<=10;i++)
        a*=l;//可優化
        b/=10;
    }
    return ans;
}

當然還要取摸的,自己加吧。

當然十進制快速冪在平時還是比二進制的慢很多的,同時你還可以在代碼中用二進制快速冪優化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM