传送门
高精度模板题。
type arr=array [0..5005] of int64;
var
x,y1,y2,y3,z1,z2,z3,bas,ans:arr;
s:ansistring;
sum,i,n,j:longint;
a,b,c,modd:int64;
procedure jia(var a:arr; b,c:arr);
var i:longint;
begin
fillchar(a,sizeof(a),0);
if (b[0]>c[0]) then a[0]:=b[0] else a[0]:=c[0];
for i:=1 to a[0] do a[i]:=b[i]+c[i];
for i:=1 to a[0] do begin
inc(a[i+1],a[i] div modd);
a[i]:=a[i] mod modd;
end;
if (a[a[0]+1]<>0) then inc(a[0]);
end;
procedure cheng(var a:arr; b:arr; c:int64);
var i:longint;
begin
a:=b;
for i:=1 to a[0] do a[i]:=a[i]*c;
for i:=1 to a[0] do begin
inc(a[i+1],a[i] div modd);
a[i]:=a[i] mod modd;
end;
if (a[a[0]+1]<>0) then inc(a[0]);
end;
procedure chu(var a:arr; b:arr);
var i:longint; x:int64;
begin
a:=b; x:=0;
for i:=a[0] downto 1 do begin
x:=x*modd+a[i];
a[i]:=x div 2;
x:=x mod 2;
end;
if (a[a[0]]=0) then dec(a[0]);
end;
procedure jian(var a:arr; b,c:arr);
var i:longint;
begin
fillchar(a,sizeof(a),0);
a[0]:=b[0];
for i:=1 to a[0] do a[i]:=b[i]-c[i];
for i:=1 to a[0] do if (a[i]<0) then begin
a[i]:=a[i]+modd; a[i+1]:=a[i+1]-1;
end;
while (a[0]<>0) and (a[a[0]]=0) do dec(a[0]);
end;
procedure print(a:arr);
var i:longint;
begin
write(a[a[0]]);
for i:=a[0]-1 downto 1 do begin
if (a[i]<100000000) then write(0);
if (a[i]<10000000) then write(0);
if (a[i]<1000000) then write(0);
if (a[i]<100000) then write(0);
if (a[i]<10000) then write(0);
if (a[i]<1000) then write(0);
if (a[i]<100) then write(0);
if (a[i]<10) then write(0);
write(a[i]);
end;
writeln;
end;
function big(a,b:arr):longint;
var i:longint;
begin
if (a[0]>b[0]) then exit(1);
if (a[0]<b[0]) then exit(0);
for i:=a[0] downto 1 do begin
if (a[i]>b[i]) then exit(1);
if (a[i]<b[i]) then exit(0);
end;
exit(1);
end;
begin
readln(a,b,c,n); modd:=1000000000;
bas[0]:=1; bas[1]:=1; y1:=bas;
for i:=1 to n do begin
cheng(z1,y1,a);
cheng(z2,y2,b);
cheng(z3,y3,c);
jia(z1,z1,z2);
jia(z1,z1,z3);
jia(y3,y3,y2);
y2:=y1; y1:=z1;
end;
jia(y3,y3,y1);
jia(y3,y3,y2);
print(y3);
readln(s);
x[0]:=length(s);
fillchar(y2,sizeof(y2),0);
for i:=1 to x[0] do x[x[0]-i+1]:=ord(s[i])-48;
for i:=1 to (x[0]-1) div 9+1 do
for j:=0 downto -8 do y2[i]:=y2[i]*10+x[i*9+j];
y2[0]:=(x[0]-1) div 9+1;
jian(y2,y2,bas);
sum:=0;
while big(y2,y3)=1 do
begin inc(sum); cheng(y3,y3,2); end;
ans[0]:=0;
for i:=1 to sum do begin
chu(y3,y3); cheng(ans,ans,2);
if big(y2,y3)=1 then begin jian(y2,y2,y3); jia(ans,ans,bas); end;
end;
jia(ans,ans,bas);
print(ans);
end.