//麦森数 #include<stdio.h> #include<memory.h> #include<math.h> #define LEN 125 void Multiply(int *a,int *b) { int i,j; int nCarry; int nTmp; int c[LEN]; memset(c,0,sizeof(int)*LEN); for(i=0;i<LEN;i++) { nCarry=0; for(j=0;j<LEN-i;j++) { nTmp=c[i+j]+a[i]*b[j]+nCarry; c[i+j]=nTmp%10000; nCarry=nTmp/10000; } } memcpy(a,c,LEN*sizeof(int)); } int main() { int i; int p; int anPow[LEN]; int aResult[LEN]; scanf("%d",&p); printf("%d ",(int)(p*log10(2))+1); anPow[0]=2; aResult[0]=1; for(i=1;i<LEN;i++) { anPow[i]=0; aResult[i]=0; } while(p>0) { if(p&1) Multiply(aResult,anPow); p>>=1; Multiply(anPow,anPow); } aResult[0]--; for(i=LEN-1;i>=0;i--) { if(i%25==12) printf("%02d %02d",aResult[i]/100,aResult[i]%100); else { printf("%04d",aResult[i]); if(i%25==0) printf(" "); } } return 0; }