Заметим, что Sn=1/(1*2)+2/(1*2*3)+3/(1*2*3*4)+:+(n-1)/(1*2*3*:*n)=(n!-1)/n!=1-1/n!.
Достаточно найти k-ую цифру 1/n! (k1), тогда k-ая цифра числа 1-1/n! равна 9-k1.
Исключением является случай n=2, т.к. тогда Sn=1/2=0.5 и k-ая цифра 10-k1.
Чтобы найти
1/n! можно делить 1 на все числа от 2 до n. Но, если первые k цифр стали
нулевыми, производить деление дальше не имеет смысла. В этом случае ответ 9.
Рассмотренный
алгоритм реализован в следующей программе
var
a : array [1..5500] of byte;
c, i, j, k, n : longint;
ok : boolean;
begin
assign(input,'input.txt'); reset(input);
assign(output,output.txt); rewrite(output);
read(n,k);
c:=1;
ok:=true;
i:=2;
while (i<=n) and ok do
begin
ok:=false;
for j:=1 to k+1 do
begin
c:=c*10+a[j];
a[j]:=c div i;
c:=c mod i;
if a[j]<>0 then ok:=true
end;
c:=0;
i:=i+1
end;
if ok then if n=2 then write ((10-a[k]) mod
10)
else write (9-a[k])
else write (9)
end.
Алгоритм и
программа предложены участницей проекта Чеботаревой Юлией из Брянска.
Работы
тестировались на компьютере Celeron 1000 MHzна 20 тестах. Эти тесты можно
взять на сайте проекта.