Cod sursa(job #2332884)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 31 ianuarie 2019 13:02:53
Problema Indep Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1005;
int cmmdc[N][300];
int add[N][300];
int v[505];
int gcd(int a,int b){
  int r;
  if(a<b)
    swap(a,b);
  while(b!=0){
    r=a%b;
    a=b;
    b=r;
  }
  return a;
}
void addnrm(int nra[],int nrb[]){
  int transp=0,i;
  for(i=1;i<=nra[0] || i<=nrb[0];i++){
    nra[i]+=nrb[i]+transp;
    transp=nra[i]/10;
    nra[i]%=10;
  }
  while(transp>0){
    nra[i]+=transp;
    transp=nra[i]/10;
    nra[i]%=10;
    i++;
  }
  nra[0]=i-1;
}
int main()
{
    FILE*fin,*fout;
    fin=fopen("indep.in","r");
    fout=fopen("indep.out","w");
    int n;
    cmmdc[0][0]=1;
    cmmdc[0][1]=1;
    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++){
      fscanf(fin,"%d",&v[i]);
      memset(add,0,sizeof(add));
      for(int j=N-1;j>=0;j--){
        if(cmmdc[j][0])
          addnrm(add[gcd(j,v[i])],cmmdc[j]);
      }
      for(int j=N-1;j>=0;j--){
        if(add[j][0])
          addnrm(cmmdc[j],add[j]);
      }
    }
    for(int i=cmmdc[1][0];i>0;i--){
      fprintf(fout,"%d",cmmdc[1][i]);
    }
    return 0;
}