传送门 我们可以求出满足 xx−1>(x−1)x 且 xx+1>(x+1)x 的整数x 然后手玩一下发现x=3 所以要尽可能的多拆出3。 不难得到以下方案: 1.n%3==0 拆成n/3个3 2.n%3==1 拆成n/3-1个3,2个2 3.n%3==2 拆成n/3个3,1个2 高精度一发水过。
uses math; var a:array [0..5005] of longint; n,k,kk,i,j:longint; u:extended; begin read(n); if (n<=4) then begin writeln(1); write(n); exit; end; k:=n div 3; if n mod 3=1 then dec(k); kk:=(n-k*3) div 2; u:=k*ln(3)/ln(10)+kk*ln(2)/ln(10); writeln(trunc(u)+1); a[0]:=1; a[1]:=1; for j:=1 to k do begin for i:=1 to a[0] do a[i]:=a[i]*3; for i:=1 to a[0] do begin inc(a[i+1],a[i] div 10); a[i]:=a[i] mod 10; end; if (a[a[0]+1]<>0) then inc(a[0]); end; for j:=1 to kk do begin for i:=1 to a[0] do a[i]:=a[i]*2; for i:=1 to a[0] do begin inc(a[i+1],a[i] div 10); a[i]:=a[i] mod 10; end; if (a[a[0]+1]<>0) then inc(a[0]); end; for i:=a[0] downto max(a[0]-99,1) do write(a[i]); end.