Cod sursa(job #2381956)

Utilizator PetyAlexandru Peticaru Pety Data 17 martie 2019 14:48:38
Problema Indep Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("indep.in");
ofstream fout("indep.out");

const int baza = 100000;
int n, x;
int one[200], dp[1002][200];

void aduna (int a[], int b[]) {
  int t = 0, aux;
  a[0] = max(a[0], b[0]);
  for (int i = 1; i <= max(a[0], b[0]); i++) {
    aux = a[i] + b[i] + t;
    a[i] = aux % baza;
    t = aux / baza;
  }
  while(t) {
    a[++a[0]] = t % baza;
    t /= baza;
  }
}

int gcd (int a, int b) {
  int r;
  while (b) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}

int main ()
{
  fin >> n;
  one[0] = one[1] = 1;
  for (int i = 1; i <= n; i++)  {
    fin >> x;
    for (int j = 1; j <= 1000; j++) {
      aduna(dp[gcd(x, j)], dp[j]);
    }
    aduna(dp[x], one);
  }
  int i,val;
  fout << dp[1][dp[1][0]];
  for(int i = dp[1][0] - 1; i >= 1; i--) {
    int nr = baza / 10;
    while(nr > 1 && nr > dp[1][i]) {
      fout << 0;
      nr /= 10;
    }
    fout << dp[1][i];
  }
  return 0;
}