ans
wyz2011
2023-11-25 16:07:32
2
返回题目
#include<bits/stdc++.h>
using namespace std;
int sum,n,len,len1,t;
int he[5005],yin[5005],ans[5005];
void f(int y){
while(y){
if(y&1){
int linshi[5005]={};
for(int i=1;i<=len;i++){
for(int j=1;j<=len1;j++){
linshi[i+j-1]+=he[i]*yin[j];
linshi[i+j]+=linshi[i+j-1]/10;
linshi[i+j-1] %=10;
}
}
len+=len1;
while(!linshi[len]&&len>0) len--;
for(int i=1;i<=len;i++)he[i]= linshi[i];
}
y/=2;
int linshi[5005*4]={};
for(int i=1;i<=len1;i++){
for(int j=1;j<=len1;j++){
linshi[i+j-1]+=yin[i]*yin[j];
linshi[i+j] += linshi[i+j-1]/10;
linshi[i+j-1]%=10;
}
}
len1*=2;
len1++;
while(!linshi[len1]&&len1>0) len1--;
for(int i=1;i<=len1;i++)
yin[i]=linshi[i];
}
}
int main(){
n=0;
char c=getchar();
while(!isdigit(c)){
c=getchar();
}
while(isdigit(c)){
n=(n<<3)+(n<<1)+(c^48);
c=getchar();
}
t=1;
he[1]=1;
yin[1]=3;
len=len1=1;
if(n%3==2){
sum=n/3;
t=2;
}
else if(n%3==1){
sum=n/3-1;
t=4;
}
else
sum=n/3;
f(sum);
for(int i=1;i<=len;i++){
ans[i]+=he[i]*t;
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
if(ans[len+1]) len++;
printf("%d\n",len);
for(int i=len;i>=max(1,len-99);i--)
printf("%d",ans[i]);
return 0;
}
{{ vote && vote.total.up }}