0
点赞
收藏
分享

微信扫一扫

repeat(2)_麦森数

不会弹吉他的二郎腿 2022-01-31 阅读 75
知识图谱

repeat_麦森数

//
#include<bits/stdc++.h>
using namespace std;

const int MAXN=500;
int ans[ MAXN+11 ];
int sq[ MAXN+11 ];

void bigmul( int a[],int b[] )
{
    int i,j,pos,temp[ MAXN+11 ];
    memset( temp,0,sizeof( temp ) );

    for( i=0;i<MAXN+5;i++ )
    {
        for( j=0;i+j<MAXN+5;j++ )   // i+j < MAXN+5
        {
            temp[i+j]+=a[i]*b[j];   // i+j
        }
    }

    for( i=0;i<=MAXN;i++ )
    {
        temp[i+1]+=temp[i]/10;
        a[i]=temp[i]%10;            // 忘带下标 
    }
}

void fastpow( int p )
{
    while( p )
    {
        if( p&1 ) bigmul( ans,sq );
        bigmul( sq,sq );
        p>>=1;
    }
}
 
int main()
{
    int p,i;

    while( ~scanf("%d",&p) )
    {
        printf("%d\n",(int)( log10(2)*p+1 ) );

        memset( ans,0,sizeof( ans ) );
        memset( sq,0,sizeof( sq ) );
        ans[0]=1; sq[0]=2;              // 忘记初始化

        fastpow( p );

        for( i=MAXN-1;i;i-- )           // 可以用 i 简化 i>0
        {
            printf("%d",ans[i]);
            if( i%50==0 ) printf("\n");     // 按要求输出
        }
        printf("%d\n",ans[i]-1);            // 按要求输出
    }
    return 0;
}

//
find:
01 初始化
02 太多数组 检查数组名及其下标
03 按要求输出

举报

相关推荐

0 条评论