lg1045麦森数

题目描述

    形如2^{P}-12 
    P
 −1的素数称为麦森数,这时PP一定也是个素数。但反过来不一定,即如果PP是个素数,2^{P}-12 
P
 −1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。

任务:从文件中输入PP(1000

lg1045麦森数_第1张图片

#include
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<
}
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<
   }
}
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)<for(int j=500;j>=1;j--){
        if(j!=500&&j%50==0) cout<cout<

你可能感兴趣的:(luogu)