//麦森数
#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\n",(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\n%02d",aResult[i]/100,aResult[i]%100);
else
{
printf("%04d",aResult[i]);
if(i%25==0)
printf("\n");
}
}
return 0;
}
麦森数
最新推荐文章于 2021-09-11 14:04:47 发布