woshishuilaizhe @ 2023-10-02 18:32:57
//P1045 [NOIP2003 普及组] 麦森数
#include<iostream>
#include<cmath>
using namespace std;
int m[499];
int cheng1()
{
for(int i=499;i>=0;i--)m[i]*=2;
for(int i=499; i>=0; i--)
{
while(m[i]>9)
{
m[i] -= 10;
if(i-1>=0)m[i-1]++;
}
}
}
int cheng2()
{
int n[499];
for(int i=499;i>=0;i--)n[i]=0;
for(int i=499; i>=0; i--)
{
for(int j=499; j>=0; j--)
{
if(i+j-499>=0)n[i+j-499]+=m[i]*m[j];
}
}
for(int i=499;i>=0;i--)m[i]=n[i];
for(int i=499; i>=0; i--)
{
while(m[i]>9)
{
m[i] -= 10;
if(i-1>=0)m[i-1]++;
}
}
}
int main()
{
int p, s[499], sl=0;
for(int i=499;i>=0;i--)m[i]=0,s[i]=0;
m[499]=1;
cin >> p;
int p1=p, p2=0, p3=0;
cout << (int)(log10(2)*p+1) << endl;
while(p1>100000)
{
if(p1%2==0)s[sl]=1,sl++,p1/=2;
else s[sl]=2,sl++,p1--,p1/=2;
}
for(int i=1;i<=p1;i++)cheng1();
for(int i=0; s[i]!=0; i++)
{
if(s[i]==1)cheng2();
if(s[i] == 2)
{
cheng2();
cheng1();
}
}
m[499]--;
for(int i=0; i<10; i++)
{
for(int j=0; j<50; j++)
{
cout << m[i*50+j];
}
cout << endl;
}
return 0;
}
by woshishuilaizhe @ 2023-10-22 15:34:16
找到问题了,53行错了