Cod sursa(job #3189421)

Utilizator ezluciPirtac Eduard ezluci Data 5 ianuarie 2024 12:35:55
Problema Indep Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
using namespace std;
#ifdef EZ
   #include "./ez/ez.h"
   const string FILE_NAME = "test";
#else
   #include <bits/stdc++.h>
   const string FILE_NAME = "indep";
#endif
#define mp make_pair
#define ll long long
#define pb push_back
#define fi first
#define se second
#define cin fin
#define cout fout
ifstream fin (FILE_NAME + ".in");
ofstream fout (FILE_NAME + ".out");

const int BAZ = 1e9;

int n;
int v[501];
int dp[2][1001][18];

void add(int a[18], int b[18])
{
   int cnt = 0;
   for (int i = 0; i < 18; ++i)
   {
      cnt += a[i] + b[i];
      a[i] = cnt%10;
      cnt /= 10;
   }
}


int main()
{
   cin >> n;
   for (int i = 1; i <= n; ++i)  cin >> v[i];

   dp[1][v[1]][0] = 1;
   for (int i = 2; i <= n; ++i)
   {
      for (int j = 1; j <= 1000; ++j)
         memcpy(dp[i&1][j], dp[i-1&1][j], 18*4);
      add(dp[i&1][v[i]], dp[1][v[1]]);
      for (int j = 1; j <= 1000; ++j)
         add(dp[i&1][__gcd(j, v[i])], dp[i-1&1][j]);
   }

   bool out = 0;
   dp[n&1][1][1] = 2;
   for (int i = 17; i >= 0; --i)
      if (out || dp[n&1][1][i])
      {
         if (out)
            for (int j = 9 - log10(dp[n&1][1][i]); j; --j)   cout << '0';
         cout << dp[n&1][1][i];
         out = 1;
      }
   
   if (cout.tellp() == 0)  cout << '0';
}