4. Daliklis ir kartotinis. 
Duotieji skaičiai d ir k iš tiesų yra ieškomųjų skaičių didžiausias bendrasis daliklis ir mažiausias bendrasis kartotinis. Todėl juos ir žymėkime dbd ir mbk.
Pirma atskirsime paprasčiausius atvejus: jei mbk < dbd arba jei mbk nesidalija iš dbd, t. y. mbk mod dbd  0, tuomet skaičiai x ir y neegzistuoja, jei mbk = dbd, tuomet x = y = dbd.
Toliau reikia nagrinėti atvejį, kai mbk > dbd: rinktis skaičių poras ir tikrinti, ar jos tenkina duotas sąlygas. Nesunku įsitikinti, kad tinkamos skaičių poros gali būti tik tokio pavidalo: dbd ir mbk, dbd * 2 ir mbk div 2, dbd * 3 ir mbk div 3 ir t. t. O sąlygas reikia tikrinti todėl, kad nebūtinai kiekviena pora jas tenkina. Pavyzdžiui, kai d = 3, k = 30, gaunamos tokios poros: x = 3, y = 30, x = 6, y = 15 ir x = 9, y = 10. Tačiau paskutinė pora netinka, nes dbd(9, 10) = 1  3. 
Kaip patikrinti, ar gauta pora tikrai tenkina sąlygas? Teks pasirašyti atskirą procedūrą, kuri ieškotų dviejų skaičių didžiausio bendrojo daliklio. Daliklio ieškosime pagal Euklido algoritmą. Jo išsamų aprašą galima rasti daugelyje programavimo vadovėlių.

function dbd (x, y: integer): integer;
  { skaičių x ir y didžiausias bendrasis daliklis }
begin
  while (x <> 0) and (y <> 0) do
    if x >= y
       then x := x mod y
       else y := y mod x;
  dbd := x + y
end;
Taigi gavę naują skaičių porą, patikriname, ar jų didžiausias bendrasis daliklis lygus duotajam ir jei taip, tai pagal formulę:
mbk = x * y div dbd (x, y)
patikriname, ar poros mažiausias bendrasis kartotinis taip pat lygus duotajam.
Skaičių x ir y geriausia ieškoti pertvarkius sąlygoje nurodytus sąryšius:
y = k  d
x
Pradinė x reikšmė imama lygi d, o toliau vis pridedama po d.

program daliklis_ir_kartotinis;
  var d, k,          { pradiniai duomenys }
      x, y: integer; { ieškomi skaičiai }
begin
  write ('Įveskite skaičius d ir k: ');
  readln (d, k);
  if (d > k) or (k mod d <> 0)   { atskiri atvejai }
  then writeln ('NĖRA SPRENDINIŲ')
  else if d = k
       then writeln (d, ' ', k)
       else 
         begin
           x := d;  { pradinė reikšmė }
           while x * x < k * d do      { y * x = k * d }
             begin
               if k * d mod x = 0
               then { jei y sveikas ir skaičius}
                 begin
                   y := k * d div x;
                   if (dbd(x, y) = d) and (x * y div d = k)
                   then writeln (x, ' ', y)
                 end;
               x := x + d { x turi būti dalus iš d }
             end
         end
end.

Testo nr.	Pradiniai duomenys	Rezultatai	Paaiškinimai	
1	10  10	10  10	Vienintelis sprendinys, kai pradiniai duomenys lygūs	
2	 9   3	NĖRA	Nėra sprendinio, nes mbk < dbd	
3	 4  13	NĖRA	Nėra sprendinio, nes mbk mod dbd = 0	
4	 4  24	 4  24
 8  12	Tinka visos galimos poros	
5	 3  30	 3  30
 6  15	Tinka ne visos galimos poros	
6	 1 240	 1 240
 3  80
 5  48
15  16	Atsitiktinis testas