ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1091. Тмутараканские экзамены

why i am wrong?
Послано IceWorld 19 апр 2005 17:34
const
    max                =15;
    Prime           :array[1..max] of integer=(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47);
var
    k,s             :integer;
    n,m                :integer;
    tot                :longint;

Procedure init;
begin
    readln(k,s);
end;

Function calc(n,m:integer):longint;
const
    Maxn               =50;
var
    i,j,k           :longint;
    tem             :longint;
    bool            :array[1..maxn] of boolean;
    num                :array[1..maxn] of integer;
begin
    fillchar(bool,sizeof(bool),true);
    k:=n-m;
    for i:=m+1 to n do
        num[i-m]:=i;
    for i:=1 to k do
        for j:=1 to n-m do
            if bool[j] and (num[i] mod j = 0) then
            begin
                num[i]:= num[i] div j;
                bool[j]:=false;
            end;
    tem:=1;
    for i:=1 to k do
    begin
        tem:=tem*num[i];
        if tem>10000 then begin calc:=10000; exit end;
    end;
    calc:=tem;
end;

Procedure work;
var
    i,j                :integer;
    tem                :longint;
begin
    tot:=0;
    for i:=1 to max do
        if prime[i]<=(s div k) then
        begin
            n:=s div prime[i];
            m:=k;
            tem:=calc(n,m);
            if tem=10000 then begin writeln(10000); halt end
            else inc(tot,tem);
            if tot>=10000 then begin writeln(10000); halt end;
        end;
    writeln(tot);
end;

begin
    init;
    work;
end.