求优化,五十分TLE

P1045 [NOIP2003 普及组] 麦森数

@[lijinhan_bmx](/user/964822) 压位优化,一次计算60次幂然后统一进位 ```cpp #include<bits/stdc++.h> using namespace std; unsigned long long m[510]; int main() { long long p; cin>>p; cout<<(long long)(log10(2)*p+1)<<endl; m[1]=2; p--; for(;p>0;p-=60) { for(int j=1;j<=500;j++) (p>60?(m[j]<<=60):(m[j]<<=p)); for(int j=1;j<=500;j++)if(m[j]>=10)m[j+1]+=m[j]/10,m[j]%=10; } m[1]--;//2的p次幂一定不是5的倍数,所以也不会是10的倍数,末尾没有0,不考虑退位的问题; for(int i=9;i>=0;i--) { for(int j=50;j>0;j--) cout<<m[i*50+j]; cout<<'\n'; } return 0; } ``` [AC](https://www.luogu.com.cn/record/117299700)
by Life_passing_by @ 2023-07-25 09:21:06


@[lijinhan_bmx](/user/964822) 前面的计算位数是一个高中数学知识的推导,不懂的话可以学一下对数然后看第一篇题解
by Life_passing_by @ 2023-07-25 09:22:26


@[Life_passing_by](/user/222411) 谢谢
by protractor @ 2023-07-25 12:49:19


|