#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++ плохо знаю, а в разборе задачи попадается такая вещь
Интересующая вас функция возвращает Наибольший общий делитель. Функция реализована по рекурсивному алгоритму определения НОД. Выбранный алгоритм является не безопасным (см. статью).
Возможно, вас смутил Тернарный оператор,
return b?gcd(b,a%b):a;
ее можно заменить на:
if(b != 0)
return gcd(b,a%b);
else
return a;
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости