fork download
  1. program NWD_a_b;
  2. type tab=array[1..10] of integer;
  3. lst = record
  4. elementy: tab;
  5. ile: integer
  6. end;
  7. var
  8. a, b, c: integer; (* a,b - liczby >1, których NWD poszukujemy, c- wyliczony NWD(a,b)*)
  9. x, i, j, k, l: integer; (* x - zm. pom. do liczenia czynn. pierwszych; i,j,k,l - zm. iterac.*)
  10. p, q, r: lst; (* p i q listy niepuste i niemalejące!
  11.   p - lista czynników pierwszych liczby a,
  12.   q - lista czynników pierwszych liczby b,
  13.   r - lista elementów wspólnych p i q *)
  14.  
  15. begin
  16. writeln('poczatek');
  17. read(a); x:=a; k:=2; i:=1;
  18. p.ile := 0;
  19. while x > 1 do
  20. begin
  21. if x mod k = 0 then
  22. begin
  23. p.ile := p.ile + 1;
  24. p.elementy[p.ile] := k;
  25. x := x div k;
  26. end
  27. else k := k + 1;
  28. end;
  29.  
  30.  
  31. read(b); x:=b; k:=2; i:=1;
  32. q.ile := 0;
  33. while x > 1 do
  34. begin
  35. if x mod k = 0 then
  36. begin
  37. q.ile := q.ile + 1;
  38. q.elementy[q.ile] := k;
  39. x := x div k;
  40. end
  41. else k := k + 1;
  42. end;
  43.  
  44.  
  45. writeln('NWD(',a,',',b,')=?');
  46. writeln('p.ile=',p.ile,' ','q.ile=',q.ile);
  47. write('Czynniki pierwsze ',a,': ');
  48. for i := 1 to p.ile do write(p.elementy[i], ' ');
  49. writeln('');
  50. write('Czynniki pierwsze ',b,': ');
  51. for i := 1 to q.ile do write(q.elementy[i], ' ');
  52. writeln('');
  53.  
  54. l:=1; j:=1; k:=0;
  55. while (l <= p.ile) and (j <= q.ile) do
  56. begin
  57. if p.elementy[l] < q.elementy[j] then
  58. l := l + 1
  59. else if p.elementy[l] > q.elementy[j] then
  60. j := j + 1
  61. else
  62. begin
  63. (* p.elementy[l] = q.elementy[j] - elementy są równe *)
  64. k := k + 1;
  65. r.elementy[k] := p.elementy[l];
  66. l := l + 1;
  67. j := j + 1;
  68. end;
  69. end;
  70. r.ile := k;
  71. write('Czynniki pierwsze wspólne: ');
  72. for i := 1 to r.ile do write(r.elementy[i], ' ');
  73. writeln('');
  74. c := 1;
  75. for i := 1 to r.ile do c := c * r.elementy[i];
  76. writeln('NWD(',a,',',b,')=',c);
  77. writeln('koniec');
  78. end.
Success #stdin #stdout 0s 5284KB
stdin
720720 36
stdout
poczatek
NWD(-176,36)=?
p.ile=0 q.ile=4
Czynniki pierwsze -176: 
Czynniki pierwsze 36: 2 2 3 3 
Czynniki pierwsze wspólne: 
NWD(-176,36)=1
koniec