Cod sursa(job #1110876)

Utilizator hevelebalazshevele balazs hevelebalazs Data 18 februarie 2014 14:12:41
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define rf(i,a,b) for(int i=b-1;i>=a;--i)
#define N 1000
#define M 100
#define MOD 1000000000
int gcd(int a,int b){return b?gcd(b,a%b):a;}

struct bign{
    int s,a[M];
    void print(){
        if(!s){printf("0");return;}
        printf("%i",a[s-1]);
        rf(i,0,s-1) printf("%.9i",a[i]);
        }
    void one(){
        s=a[0]=1;
        }
    }a[N+1];

void add(bign*a,bign*b){ //a+=b
    if(b->s>a->s) a->s=b->s;
    fr(i,0,b->s) a->a[i]+=b->a[i];
    fr(i,0,a->s) if(a->a[i]>=MOD) a->a[i+1]+=a->a[i]/MOD,a->a[i]%=MOD;
    if(a->a[a->s])++a->s;
    }


int main(){
    freopen("indep.in","r",stdin);
    freopen("indep.out","w",stdout);
    int n,x,m=0;
    bign one;
    one.one();
    scanf("%i",&n);
    fr(i,0,n){
        scanf("%i",&x);
        fr(i,1,m+1) add(a+gcd(i,x),a+i);
        add(a+x,&one);
        if(x>m)m=x;
        }
    a[1].print();
    return 0;
    }