lg1045麦森数

来源:互联网 发布:ubuntu 查看分区格式 编辑:程序博客网 时间:2024/04/26 02:54

题目描述

    形如2^{P}-12     P −1的素数称为麦森数,这时PP一定也是个素数。但反过来不一定,即如果PP是个素数,2^{P}-12 P −1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。任务:从文件中输入PP(1000<P<31000001000<P<3100000),计算2^{P}-12 P −1的位数和最后500位数字(用十进制高精度数表示)输入输出格式输入格式:文件中只包含一个整数PP(1000<P<31000001000<P<3100000)输出格式:第一行:十进制高精度数2^{P}-12 P −1的位数。第2-11行:十进制高精度数2^{P}-12 P −1的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)不必验证2^{P}-12 P −1与PP是否为素数。输入输出样例输入样例#1: 复制1279输出样例#1: 复制38600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407932194664399081925240327364085538615262247266704805319112350403608059673360298012239441732324184842421613954281007791383566248323464908139906605677320762924129509389220345773183349661583550472959420547689811211693677147548478866962501384438260291732348885311160828538416585028255604666224831890918801847068222203140521026698435488732958028878050869736186900714720710555703168729087

这里写图片描述

#include<bits/stdc++.h>using namespace std;int a[100001];int b[100001];int c[1000001];void cheng(){    memset(c,0,sizeof(c));    for(int j=1;j<=501;j++){        for(int k=1;k<=501;k++){            int t=c[j+k-1]+a[j]*b[k];            c[j+k-1]=t%10;            c[j+k]+=t/10;        }    }    memcpy(a,c,sizeof(a));    /*for(int j=0;j<=100;j++){        cout<<b[j]<<" ";    }    cout<<endl;*/}void cheng1(){    memset(c,0,sizeof(c));    for(int j=1;j<=501;j++){        for(int k=1;k<=501;k++){            int t=c[j+k-1]+b[j]*b[k];            c[j+k-1]=t%10;            c[j+k]+=t/10;        }    }    memcpy(b,c,sizeof(b));}void pow(int x){   while(x){       if(x%2==1){          cheng();       }       x=x/2;       cheng1();     //1  cout<<1<<endl;   }}int main(){    memset(a,0,sizeof(a));    memset(b,0,sizeof(b));    memset(c,0,sizeof(c));    int n;    a[1]=1;    b[1]=2;    cin>>n;    pow(n);    a[1]-=1;    cout<<(int)(log10(2)*n+1)<<endl;    for(int j=500;j>=1;j--){        if(j!=500&&j%50==0) cout<<endl;        cout<<a[j];    }}
原创粉丝点击