这个中有规律
program sl;
var
a:array [1..2000] of longint;
i,j,k:longint;
n:longint;
begin
readln(k,n);
{ b[0]:=1;
c[0]:=0;
for i:=1 to 46 do
begin
b[i]:=b[i-1]*k;
c[i]:=c[i-1]+b[i];
end; }
a[1]:=1;
a[2]:=k;
i:=2;
while i<=512 do
begin
a[i]:=a[i div 2]*k;
for j:=i+1 to i*2-1 do
a[j]:=a[i]+a[j-i];
i:=i*2;
end;
writeln(a[n]);
readln;
end.
保证AC
就拿你的样例举例吧。。。100=64+32+4 换成2进制就是 1100100
再把 1100100 在三进制下的权值求出来。。。就是 729+243+9=981 就是这样。。
换种说法 就是 2(6)+2(5)+2(2) 变成 3(6)+3(5)+3(2)
先把n转化为二进制数
然后是1的位置就要加上k的对应次幂,0的无视
似乎需要高精