1 solutions
-
0
C++ :
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> using namespace std; #define MAX 550 typedef struct { int a[MAX]; }bign; void cheng(bign &c,bign &a,bign &b) { memset(c.a,0,sizeof(c.a));//注意清零 for(int i=0;i<=499;++i)//高精度乘法 { for(int j=0;j<=499;++j) { c.a[i+j]+=a.a[i]*b.a[j];//注意是 += } } for(int i=0;i<=499;++i)//处理进位 { if(c.a[i]>=10)//注意是 >= 10 { c.a[i+1]+=c.a[i]/10; c.a[i]%=10; } } c.a[500]=0;//注意 特殊处理 } int main() { long long n; cin>>n; cout<<floor(n*log10(2)+1)<<endl; bign z[MAX]={{1},{2}},sum={{1}},t; int m=(int)(log(n)/log(2))+3;//用递归求快速幂 for(int i=2;i<=m;++i) { cheng(z[i],z[i-1],z[i-1]); } int js=0;//计数器 while(n>0) { if(n%2==1) { t=sum; cheng(sum,t,z[js+1]); } n/=2; js++; } sum.a[0]--;//注意!!麦森数 是2^n-1 for(int i=499;i>=0;--i) { if((i+1)%50==0&&(i+1)!=500) cout<<endl; cout<<sum.a[i]; } return 0; }
- 1
Information
- ID
- 607
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By