Cod sursa(job #2580732)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 14 martie 2020 00:02:42
Problema Indep Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 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;
    }
  }

};
HugeN add(HugeN a,HugeN b){
  int t=0;
  HugeN rez(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];
    }
    rez.nr.push_back(t%10);
    t/=10;
  }
  return rez;
}
HugeN mult(HugeN a,int b){
  int t=0;
  HugeN rez(0);
  for(int i=0;i<a.nr.size() || t>0;i++){
    if(i<a.nr.size()){
      t+=a.nr[i]*b;
    }
    rez.nr.push_back(t%10);
    t/=10;
  }
  return rez;
}
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++){
      d[__gcd(x,j)]=add(d[j],d[__gcd(x,j)]);
    }
    d[x]=add(d[x],d[0]);
  }
  for(int i=d[1].nr.size()-1;i>=0;i--)
    fprintf(fout,"%d",d[1].nr[i]);
  return 0;
}