Cod sursa(job #2400582)

Utilizator Carol_LucaCarol Luca Carol_Luca Data 8 aprilie 2019 21:18:45
Problema Indep Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 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;

}