Тема ссылка: https: //codeforces.com/contest/798/problem/C
подвержены действию: дать вам число п, а1, а2, ... в. В связи с этим НОД (a1, a2, ... с )> 1, так что операция может быть выполнена один раз д.в., AI + 1 становится д.в. - в [I + 1] , AI + A [I + 1]. Определена такие , что НОД (а1, а2, ... )> требуется операция минимальное количество.
Идеи: Во-первых, мы должны знать, если мы можем достичь НОД (а1, а2, ... ап)> 1, то, конечно, a1 ~ четное число (0 четное число), поэтому наша цель состоит в том, чтобы использовать наименьшее количество операций становится число всех даже. Если два числа нечетно, то операция, которая требует времени (плюс или минус нечетное четное число), если оно является четным и нечетным, и это требует двух операций (сложение и вычитание, чтобы получить нечетно нечетных и четных, то нечетных и четных-нечетных получается вычитанием) , так что не может быть больше, чем 1 НОД
#include <bits/stdc++.h>
#define LL long long
using namespace std;
int a[100005];
int main()
{
int n, gcd;
scanf("%d", &n);
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
if(i==1){
gcd=a[i];
}
else{
gcd=__gcd(gcd, a[i]);
}
}
printf("YES\n");
if(gcd>1){
printf("0\n");
return 0;
}
int ans=0;
a[n+1]=2;
for(int i=1; i<=n; i++){
if(a[i]%2==1&&a[i+1]%2==1){
ans++;
i++;
}
else if(a[i]%2==1&&a[i+1]%2==0){
ans+=2;
}
}
printf("%d\n", ans);
return 0;
}