ЧТО ЭТО ТАКОЕ С++

326
05 ноября 2017, 18:31
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b)
{ return b?gcd(b,a%b):a;
}
int main() {
 ios::sync_with_stdio(0); // для ускорения ввода
 cin.tie(0);
 int N;
 cin >> N;
 ll a[64];
 unordered_set<ll> total;
 for (int ff = 0, nff = 0; cin >> a[ff++]; ff = nff, nff = 0)
for (int i = 0; i < ff; ++i) {
total.insert(a[nff] = gcd(a[i], a[ff-1]));
if (!nff || a[nff] != a[nff-1]) ++nff;
}
 cout << total.size() << endl;
}

ОбЪясните, пожалуйста, что такое:

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

а то я c++ плохо знаю, а в разборе задачи попадается такая вещь

Answer 1

Интересующая вас функция возвращает Наибольший общий делитель. Функция реализована по рекурсивному алгоритму определения НОД. Выбранный алгоритм является не безопасным (см. статью).
Возможно, вас смутил Тернарный оператор,

return b?gcd(b,a%b):a;  

ее можно заменить на:

if(b != 0)
   return gcd(b,a%b);
else
   return a;
READ ALSO
Как в с++ получить имя типа переменной?

Как в с++ получить имя типа переменной?

Помогите получить имя типа переменной

283
Не добавляется структура в &lt;set&gt;

Не добавляется структура в <set>

Не добавляется структура во множествоНе могу разобраться в ошибках в функции void initColor(), компилятор указывает на инструкцию isColrs

293
Не могу взять значение по итератору

Не могу взять значение по итератору

Как взятьsecond значение пары, на которую указывает

283