Cod sursa(job #2580735)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 14 martie 2020 00:09:27
Problema Indep Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<bits/stdc++.h>
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 N=1005;
HugeN d[N];
int main()
{
  FILE*fin,*fout;
  fin=fopen("indep.in","r");
  fout=fopen("indep.out","w");
  int n;
  fscanf(fin,"%d",&n);
  d[0]=1;
  for(int i=1;i<=n;i++){
    int x;
    fscanf(fin,"%d",&x);
    for(int j=1;j<N;j++){
      if(!d[j].nr.empty()){
        int g=__gcd(x,j);
        add(d[g],d[j]);
      }
    }
    add(d[x],d[0]);
  }
  for(int i=d[1].nr.size()-1;i>=0;i--)
    fprintf(fout,"%d",d[1].nr[i]);
  if(d[1].nr.empty()){
    fprintf(fout,"0");
  }
  return 0;
}