printЗанятие 1

printНекоторые алгоритмы

Нахождение наибольшего общего делителя двух положительных целых чисел (НОД):
int nod(int a, int b)
{ return b?nod(b,a%b):a;
}

Нахождение наименьшего общего кратного двух положительных целых чисел (НОК):
int nok(int a, int b)
{ return a/nod(a,b)*b;
}

Число сочетаний из `n` по `k` `C_n^k\ =\ {n!}/{k!(n-k)!}` можно найти так:
int c(int n, int k)
{
  int i,r=1;
  for(i=k+1; i<=n; ++i)
    r=r*i/(i-k);
  return r;
}
Можно показать, что при выполнении деления делимое всегда кратно делителю: при выполнении деления на `j` делимое получается как произведение последовательных чисел от `i+1` до `i+j`, и хотя бы одно из этих чисел делится без остатка на `j`.
loading