【题解】洛谷P1045麦森数[NOIP2003普及] 高精快速幂

题目链接
这里写图片描述


#include<cstdio>
#include<cmath>
#include<cstring>
const int N=3e3+10;
int p,n;
int a[N],b[N],c[N];
void mul(int *a,int *b)
{
    memset(c,0,sizeof(c));
    for(int i=1;i<=500;i++)
        for(int j=1;j<=500;j++)
        {
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
}
void qpow()
{
    while(p)
    {
        if(p&1)mul(a,b),memcpy(a,c,sizeof(c));
        p>>=1;mul(b,b);memcpy(b,c,sizeof(c));
    }
}
int main()
{
    //freopen("out.txt","w",stdout);
    scanf("%d",&p);
    n=ceil(log10(2)*p);
    printf("%d\n",n);
    a[1]=1;b[1]=2;
    qpow();
    a[1]--;
    for(int i=500;i;i--)
    {
        printf("%d",a[i]);
        if((i-1)%50==0)puts("");
    }
    return 0;
}

总结

高精快速幂和普通快速幂没啥区别

猜你喜欢

转载自blog.csdn.net/qq_41958841/article/details/82731814