比赛 刷题ing 评测结果 AAAAAAAAAA
题目名称 麦森数 最终得分 100
用户昵称 zzz 运行时间 0.079 s
代码语言 C++ 内存使用 1.31 MiB
提交时间 2018-05-29 14:40:34
显示代码纯文本
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
using namespace std;
#define LL long long
#define N 510
#define mod 1000000007
#define INF 0x3f3f3f3f
#define lson root<<1
#define rson root<<1|1
int a[N],b[N*N],c[N];
void mul()
{
    memset(b,0,sizeof(b));
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            b[i+j] += a[i]*a[j];
        }
    }
    for(int i=0;i<N-1;i++)
    {
        b[i+1] +=b[i]/10;
        b[i] = b[i]%10;
        a[i] = b[i];
    }
}
void mul1()
{
    memset(b,0,sizeof(b));
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            b[i+j] += a[i]*c[j];
        }
    }
    for(int i=0;i<N-1;i++)
    {
        b[i+1] +=b[i]/10;
        b[i] = b[i]%10;
        c[i] = b[i];
    }
}
void solve(int n)
{
    memset(a,0,sizeof(a));
    c[0] = 1;
    a[0] = 2;
    while(n)
    {
        if(n&1) mul1();
        mul();
        n = n/2;
    }
}
int main()
{
    freopen("mason.in","r",stdin);
    freopen("mason.out","w",stdout);
    int p;
    while(scanf("%d",&p)!=EOF)
    {
        printf("%d\n",(int)(p*0.30102999566)+1);
        solve(p);
        c[0]--;
        int i = 499;
        int sum = 0;
        while(i>=0)
        {
            printf("%d",c[i--]);
            sum++;
            if(sum==50)
            {
                puts("");
                sum = 0;
            }

        }
    }
    return 0;
}