Cod sursa(job #2581053)

Utilizator vladcainamisirVlad Cainamisir vladcainamisir Data 14 martie 2020 14:39:01
Problema Indep Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct HugeN{
  vector<int> nr;
  HugeN (){
    nr.clear();
  }
  HugeN(int x){
    nr.clear();
    while(x>0){
      nr.push_back(x%10);
      x/=10;
    }
  }
};
void add(HugeN &a,const HugeN &b){
  int t=0;
  for(int i=0;i<a.nr.size() || i<b.nr.size() || t>0;i++){
    if(i<a.nr.size()){
      t+=a.nr[i];
    }
    if(i<b.nr.size()){
      t+=b.nr[i];
    }
    if(i<a.nr.size())
      a.nr[i]=t%10;
    else
      a.nr.push_back(t%10);
    t/=10;
  }
}
const int NMAX=1000;
HugeN dp[NMAX + 5];
int main()
{
  int n , x;
  freopen("indep.in" , "r" , stdin);
  freopen("indep.out" , "w" , stdout);
  scanf("%d", &n);
  dp[0] = 1;
  for(int i = 1; i <= n ; i ++)
  {
    scanf("%d" , &x);
    for(int j = 1; j <= NMAX ; j ++)
    {
      int cmmdc = __gcd(x , j);
      add(dp[cmmdc] , dp[j]);
    }
    add(dp[x] , dp[0]);
  }
  for(int i = dp[1].nr.size() - 1; i >= 0 ; i --)
    printf("%d ", dp[1].nr[i]);
  if(dp[1].nr.empty() == true)
    printf("0");
  return 0;
}