P1223 麦森数
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int p;
typedef int INT[1000];
int a[1000],ans[1000],c[1000];
void pingfang(INT &a,INT b)
{
int i,j,k=0;
int c[500];
memset(c,0,sizeof(c));
for (i=0;i<500;i++)
for (j=0;j<500-i;j++){
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j] / 10 ;
c[i+j]%= 10;
}
c[499] %=10;
for (i=0;i<500;i++)
a[i]=c[i];
return ;
}
int main()
{
cin>>p;
cout<<int(p*log10(2)+1)<<endl;
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
a[0]=2;
ans[0]=1;
while (p>0) {
if (p % 2==1) pingfang(ans,a);
p/=2;
pingfang(a,a);
}
ans[0]--;
for (int i=499;i>=0;i--){
cout<<ans[i];
if (i % 50==0)cout<<endl;
}
return 0;
}
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int p;
typedef int INT[1000];
int a[1000],ans[1000],c[1000];
void pingfang(INT &a,INT b)
{
int i,j,k=0;
int c[500];
memset(c,0,sizeof(c));
for (i=0;i<500;i++)
for (j=0;j<500-i;j++){
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j] / 10 ;
c[i+j]%= 10;
}
c[499] %=10;
for (i=0;i<500;i++)
a[i]=c[i];
return ;
}
int main()
{
cin>>p;
cout<<int(p*log10(2)+1)<<endl;
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
a[0]=2;
ans[0]=1;
while (p>0) {
if (p % 2==1) pingfang(ans,a);
p/=2;
pingfang(a,a);
}
ans[0]--;
for (int i=499;i>=0;i--){
cout<<ans[i];
if (i % 50==0)cout<<endl;
}
return 0;
}