Tolyadan Tort#1033

Tolyadan Tort (Həll təhlili)

Tortu müəyyən uzunluğu olan bir kəsik olaraq təsəvvür edək. Bu kəsiyin üzərində onu bərabər hissəyə bölən kəsikləri qeyd edək. Daha sonra onu bərabər hissəyə bölən kəsikləri qeyd edək. Bütün bu kəsikləri etdikdən sonra istədiyimiz bölünməni alarıq. Qalan yalnız yaranmış parçaların sayını hesablamaqdır. Bu say:

n + m - ƏBOB(n, m)

Sübut. Tortu bərabər hissəyə bölmək üçün n - 1 kəsik etmək lazımdır. Eyni şəkildə, hissələr üçün də m - 1 kəsik lazımdır. Bu kəsiklər arasında ƏBOB(n, m) - 1 təsadüfi kəsiklər olacaq. Buna görə də, ümumi olaraq bu qədər kəsik ediləcək

(n - 1) + (m - 1) - (ƏBOB(n, m) - 1) = n + m - 1 - ƏBOB(n, m)

fərqli kəsiklər. Bundan sonra tort n + m - ƏBOB(n, m) hissəyə bölünəcək.

Nümunə

Tortu hissəyə bölmək üçün kəsik lazımdır.

Tortu hissəyə bölmək üçün kəsik lazımdır.

Bu kəsiklərdən ƏBOB(6, 9) - 1 = 2 kəsik təsadüf edir.

Beləliklə, tortun üzərində 5 + 8 - 2 = 11 fərqli kəsik olacaq. Bu kəsiklərdən sonra tort parçaya bölünəcək.

Alqoritmin implementasiyası

gcd funksiyası iki ədədin və ən böyük ortaq bölənini hesablayır.

int gcd(int a, int b)
{
  return (!b) ? a : gcd(b,a % b);
}

Proqramın əsas hissəsi. Giriş məlumatını oxuyuruq.

scanf("%d %d",&m,&n);

Nəticəni hesablayır və çıxışa veririk.

res = m + n - gcd(m,n);
printf("%d\n",res);

Java implementasiyası

import java.util.*;

public class Main
{

  static int gcd(int a, int b)
  {
    return (b == 0) ? a : gcd(b,a % b);
  }

  public static void main(String []args)
  {
    Scanner con = new Scanner(System.in);
    int m = con.nextInt();
    int n = con.nextInt();

    int res = m + n - gcd(m,n);
    System.out.println(res);
    con.close();
  }
}    

Python implementasiyası

gcd funksiyası iki ədədin və ən böyük ortaq bölənini hesablayır.

def gcd(a, b):
  if a == 0: return b
  if b == 0: return a
  if a > b: return gcd(a % b, b)
  return gcd(a, b % a)

Proqramın əsas hissəsi. Giriş məlumatını oxuyuruq.

m, n = map(int, input().split())

Nəticəni hesablayır və çıxışa veririk.

res = m + n - gcd(m, n)
print(res)