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 }}