Rambler's Top100

Скачать программы    Все программы автора

ВТО

 Территория Великой Треугольной Области (ВТО) представляет собой прямоугольный треугольник. Длины его катетов равны M и N государственных единиц длины (ГЕД). Правительство ВТО решило покрыть как можно большую часть територии области квадратными плитами размером 1´1 ГЕД. Плиты должны плотно прилегать друг к другу и к катетам ВТО. Разрезать плиты нельзя.

Согласно межгосударственным соглашениям, правительство ВТО не имеет права покрыть частью своей плиты чужую територию. Производитель поставляет плиты только контейнерными партиями — по P плит. Правительство заказывает столько контейнеров, сколько необходимо для реализации проекта.

Заведующий центральным складом, узнав про проект, решил, что его интересует коли­чество плит, которые останутся на складе из последнего контейнера после покрытия територии ВТО.

Задание

Напишите программу TRIANGLE, которая по длинам катетов ВТО и вместимости контейнера находит количество плит, которые останутся на складе после осуществления проекта.

Входные данные

Единственная строка входного файла TRIANGLE.DAT содержит три целых числа: M, N (2≤MN≤2 000 000 000) и P (100≤P≤10 000).

Выходные данные

Единственная строка выходного файла TRIANGLE.SOL должна содержать целое число — количество неиспользованных плит из последнего контейнера.

Пример входных и выходных данных

TRIANGLE.DAT

TRIANGLE.SOL

4 3 100

97

 

{ Problem: TRIANGLE} 

var fv:text;

x,y,t,nsd_:longint;

tot,tot_:longint;

P:longint;

function NSD(x,y:longint):longint;

Begin

while (x>0) and (y>0) do

if x>y then x:=x mod y

else y:=y mod x;

if x>0 then NSD:=x

else NSD:=y

End;

function Formula2(x,y:longint):longint;

var mul1,mul2,prod,subtr,res_,res:longint;

Begin

mul1:=x mod (2*P);

mul2:=y mod (2*P);

prod:=(mul1*mul2) mod (2*P);

subtr:=(2*P+(x mod (2*P))+(y mod (2*P))-1) mod (2*P);

res_:=(prod-subtr) div 2;

res:=(2*P+res_) mod P;

Formula2:=res;

{Formula2:=(2*P+(((x mod (2*P))*(y mod (2*P))) mod (2*P)-(x+y-1) mod (2*P)) div 2) mod P;}

End;

BEGIN

assign(fv,'triangle.dat'); reset(fv);

readln(fv,x,y,P);

close(fv); 

nsd_:=NSD(x,y);

if nsd_>1 then begin

Tot:=Formula2(x div nsd_,y div nsd_);

tot_:=((nsd_ mod (2*P))*((nsd_-1) mod (2*P)) div 2) mod P;

tot_:=(tot_*(((x div nsd_) mod P)*((y div nsd_) mod P) mod P)) mod P;

Tot:=(Tot*(nsd_ mod P) +tot_) mod P;

end else

Tot:=Formula2(x,y);

assign(fv,'triangle.sol'); rewrite(fv);

WriteLn(fv,(P-Tot) mod P);

close(fv);

END.

Белорусский рейтинг MyMinsk.com Сайты беларуси Регистр "ЗУБР" Каталог на TIGA.BY, а также  новости, работа, объявления, фото и многое другое Рейтинг@Mail.ru Rambler's Top100 Белорусский каталог программ
Hosted by uCoz