ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

Алгоритмы нахоТдСния наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля (ΠΠžΠ”) ΠΈ ΠΈΡ… ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ характСристика

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Π£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//Алгоритм Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ разностСйstart = clock ();cout<< «ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ разностСй» << endl;res= gcd_algorithms:classicEuclidBySubtr (a, b);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² нахоТдСния наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля
  • 2. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ экспСримСнта
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1

Алгоритмы нахоТдСния наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля (ΠΠžΠ”) ΠΈ ΠΈΡ… ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ характСристика (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

toInt ();int x = (-1) * inverseAModK * b;x = modK (x, k);if (G[x] == 1 && abs (a) + abs (b) < minLengthOfSumAB[x]){A[x] = a;minLengthOfSumAB[x] = abs (a) + abs (b);}}}// Eratosthenes’s sievefor (inti = 0; i <= k; i++){P[i] = true;}P[0] = P[1] = false;for (inti = 2; i * i <= k; i++){if (P[i]){for (int j = i * i; j <= k; j += i) P[j] = false;}}for (int d = boundary + 1; d <= k; d++){if (P[d] && k % d ≠ 0) P[d] = false;}//Second phase — trial divisionnumber g = 1;for (inti = 2; i <= k; i++){while (P[i] && u % i == 0 && v % i == 0){u /= i;v /= i;g *= i;}}// Third phase — Main loopwhile (u ≠ 0 && v ≠ 0){number u1 = u % k, v1 = v % k;int indexU1 = u1. toInt (), indexV1 = v1. toInt ();if (G[indexU1] > 1){u /= G[indexU1]; }else{if (G[indexV1] > 1){v /= G[indexV1]; }else{number x = (u1 * I[indexV1]) % k;number a = A[x.toInt ()]; number b = modK ((-a * x), k);maxNumber (u, v) = abs (a * u + b * v) / k;}}}number t = u + v;// Fourth phase — Trial divisionfor (int d = 2; d <= k; d++){while (P[d] && t % d == 0) t /= d;}g *= t;return g;}//Алгоритм Π›Π΅ΠΌΠ΅Ρ€Π° поиска ΠΠžΠ”numbergcd_algorithms:lemehr_gcd (constnumber& a, constnumber& b, number& p){//ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅long h;number a0, a1;number u0, v0;number u1, v1;number q0, q1;number r, R;number T;number q;numberpow_base = 2;number W = 1;number W1 = 1;number temp;numberA, B;//Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅Π·Π½Π°Ρ‡Π΅Π½ΠΈΡA = a;B = b;if (A > B){temp = A;A = B;B = temp;}//ВычислСниСстСпСниоснованияfor (inti = 0; i < p. toInt (); i++)W = W*pow_base;//Пока выполняСтся условиСwhile (B >= W){//ВычисляСм Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ числа Bh = (int)(log ((double)B.toLong ()) /log (2.))+1;//РассчитываСм порядок hh = h — p. toUnsignedLong () + 1;//Π‘Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ 2^hfor (inti = 0; i < h; i++)W1 = W1*pow_base;//ВычисляСм Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСнияa0 = A / W1;a1 = B / W1;u0 = 1;u1 = 0;v0 = 0;v1 = 1;while (((a1 + u1) ≠ 0) && ((a1 + v1) ≠ 0)){q0 = (a0 + u0) / (a1 + u1);q1 = (a0 + v0) / (a1 + v1);if (q0 ≠ q1) break;r = a0 — q0*a1; a0 = a1; a1 = r;r = u0 — q0*u1; u0 = u1; u1 = r;r = v0 — q0*v1; v0 = v1; v1 = r;}if (v0 == 0){q = A / B;R = A — q*B;A = B;B = R;}else{R = u0*A + v0*B;T = u1*A + v1*B;A = R;B = T;}if (B == 0) return A;}A = classicEuclidByDiv (A, B);return A;}numbergcd_algorithms:jw_gcd (constnumber& A, constnumber& B, number& k){number r;number n1, n2;number d1, d2;numbersqrt_k = (int)sqrt ((double)k.toLong ());number div_;number res1, res2, res;number pow=1;for (inti = 0; i < k. toLong (); i++)pow *= 2;k = pow;r = (A / B) % k;n1 = k;d1 = 0;n2 = r;d2 = 1;res1 = A;res2 = B;while (n2 >= sqrt_k){div_ = n1 / n2;//f1=f1-[n1/n2]*f2n1 = n1 — div_*n2;d1 = d1 — div_*d2;//swap (f1,f2)number temp = n1;n1 = n2;n2 = temp;temp = d1;d1 = d2;d2 = temp;res1 = abs (n1*B — d1*A) / k;res2 = abs (n2*B — d2*A) / k;res = classicEuclidByDiv (max (res1, res2), min (res1, res2));} res = classicEuclidByDiv (max (res1, res2), min (res1,res2));return res;}Main.cpp#include" GCDAlgorithms. h" #include<iostream>#include<time.h>#include<string>#include" windows. h" #include" BigInteger/BigIntegerUtils.hh" #defineBILLION 1E9usingnamespacestd;intmain (){long start, stop;numbera, b;number k1, k2, k3;long k1, k2,k3;string a1, b1;SetConsoleCP (1251);SetConsoleOutputCP (1251);cout << «Π’вСдитСпСрвоСчислоa» << endl;cin >> a1;cout<< «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число b» << endl;cin >> b1;a = stringToBigInteger (a1);b = stringToBigInteger (b1);cout << «Π—Π°Π΄Π°ΠΉΡ‚Π΅ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ k>=2 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° k-арногоалгоритмапоиска.

ΠΠžΠ”" << endl;cin >> k1;k1 = k1;cout << «Π—Π°Π΄Π°ΠΉΡ‚Π΅ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ k Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π›Π΅ΠΌΠ΅Ρ€Π° k ΠΏΠΎΠΈΡΠΊΠ°.

ΠΠžΠ”" << endl;cout<< «Π”ля k Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ k>=4, Π²Π·Π°ΠΈΠΌΠ½ΠΎ простоС с a ΠΈ b» << endl;cin >> k2;k2 = k2;cout<< «Π—Π°Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ k Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π”ΠΆΠ°Π±Π΅Π»ΠΈΠ°Π½Π°-Π’Π΅Π±Π΅Ρ€Π° поиска ΠΠžΠ”» << endl;cout<< «Π”ля k Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ k>=4, Π²Π·Π°ΠΈΠΌΠ½ΠΎ простоС с a ΠΈ b» << endl;cin >> k3;k3 = k3;//Π—Π°Π΄Π°Π΅ΠΌ настройки подсчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈsrand (time (0));//РСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ разностСйnumberres;start = clock ();cout<< «Π Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ разностСй» << endl;res= gcd_algorithms:classicEuclidBySubtrRecursive (a, b);cout<<" Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;stop = clock ();cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//РСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ дСлСнияstart = clock ();cout<< «Π Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ дСлСния» << endl;res = gcd_algorithms:classicEuclidByDivRecursive (a, b);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//Алгоритм Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ разностСйstart = clock ();cout<< «ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ разностСй» << endl;res= gcd_algorithms:classicEuclidBySubtr (a, b);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//Алгоритм Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ дСлСнияstart = clock ();cout<< «ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ дСлСния» << endl;res = gcd_algorithms:classicEuclidByDiv (a, b);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//РСкурсивный Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°start = clock ();cout<< «Π Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°» << endl;res = gcd_algorithms:binaryEuclidRecursive (a, b);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°start = clock ();cout<< «Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°» << endl;res = gcd_algorithms:binaryEuclid (a, b);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//РСкурсивный Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°start = clock ();cout<< «Π Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°» << endl;number x, y;res = gcd_algorithms:extendedEuclidRecursive (a, b, x, y);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;cout << «ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Ρ‹x, yΠΏΡ€ΠΈΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… a*x+b*y=ΠΠžΠ” (a, b)» << endl;cout << «x=» << x. toLong () << «, y=» << y. toLong () << endl;//Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°start = clock ();cout<< «Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°» << endl;res = gcd_algorithms:extendedEuclid (a, b, x, y);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;cout << «ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Ρ‹x, yΠΏΡ€ΠΈΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… a*x+b*y=ΠΠžΠ” (a, b)» << endl;cout << «x=» << x. toLong () << «, y=» << y. toLong () << endl;//k-Π°Ρ€Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска ΠΠžΠ”start = clock ();cout<< «k-Π°Ρ€Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска ΠΠžΠ”» << endl;res = gcd_algorithms:kAryEuclid (a, b, k1.toInt ());stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//Алгоритм Π›Π΅ΠΌΠ΅Ρ€Π° поиска ΠΠžΠ”start = clock ();cout<< «ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π›Π΅ΠΌΠ΅Ρ€Π° поиска ΠΠžΠ”» << endl;res = gcd_algorithms:lemehr_gcd (a, b, k2);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;//Алгоритм.

Π”ΠΆΠ°Π±Π΅Π»ΠΈΠ°Π½Π°-Π’Π΅Π±Π΅Ρ€Π°start = clock ();cout << «ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

Π”ΠΆΠ°Π±Π΅Π»ΠΈΠ°Π½Π°-Π’Π΅Π±Π΅Ρ€Π°" << endl;res = gcd_algorithms:jw_gcd (a, b, k3);stop = clock ();cout << «Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠžΠ” = «<< res. toLong () << endl;cout << «Π’рСмявыполнСнияалгоритма, c «<< (float)(stop — start) / 1000 << endl;system («pause»);return 0;}.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

  1. Π—. И., Π¨Π°Ρ„Π°Ρ€Π΅Π²ΠΈΡ‡ И. Π . ВСория чисСл.—Москва: Наука, 1964.
  2. Π¨. Π’. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл: ΡƒΡ‡Π΅Π±Π½ΠΎΠ΅ пособиС. — ΠšΠ°Π·Π°Π½ΡΠΊΠΈΠΉ Ρ„Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ унивСрситСт, Казань, 2011. — 189 c.
  3. Π•.Π’. ΠŸΠ°Π½ΠΊΡ€Π°Ρ‚ΡŒΠ΅Π² — Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹. М.: ΠœΠ“Π£, 2007.
  4. J.Sorrenson. The k-ary GCD Algorithm, 1990, Univ. Wisc-Madison Tecn. Report, 20p.
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ
ΠšΡƒΠΏΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ

Π˜Π›Π˜