Cod sursa(job #982977)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 10 august 2013 16:25:59
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
include <fstream>
#include <cstdio>
  
#define MAX 505
#define RMAX 1005
#define BASE 10000
  
using namespace std;
  
int N, V[MAX], ONE[RMAX], dp[RMAX][RMAX];
  
inline int cmmdc(int a, int b)
{
    if(!b) return a;
    return cmmdc(b, a % b);
}
  
void add(int A[], int B[])
{
    int t = 0, i;
    for(i = 1; i <= A[0] || i <= B[0] || t; i++, t /= BASE)
        A[i] = (t += A[i] + B[i]) % BASE;
    A[0] = i - 1;
}
  
int main()
{
    ifstream in("indep.in"); in>>N;
    for(int i = 1; i <= N; i++) in>>V[i];
    in.close(); ONE[0] = ONE[1] = 1;
    for(int i = 1; i <= N; i++)
    {
        for(int j = 1; j < RMAX; j++)
            add(dp[cmmdc(j, V[i])], dp[j]);
        add(dp[V[i]], ONE);
    }
    freopen("indep.out", "w", stdout);
    if(!dp[1][dp[1][0]]) printf("0\n");
    else
    {
        printf("%d", dp[1][dp[1][0]]);
        for(int j = dp[1][0] - 1; j; j--) printf("%04d", dp[1][j]);
    }
    fclose(stdout);
    return 0;
}