Cod sursa(job #2631709)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 30 iunie 2020 17:33:04
Problema Indep Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 10007
#define INF 2100000000

using namespace std;
const int NMAX = 505;

int N;
int v[NMAX];
int dp[2 * NMAX][3 * NMAX];

inline int gcd(int x, int y){
    if(!y)
        return x;
    return gcd(y, x % y);
}

inline void sum(int a, int b){
    int nr, c = 0;
    for(int i = 1; i <= max(dp[a][0], dp[b][0]); ++i){
        nr = c + dp[a][i] + dp[b][i];
        c = nr / 10;
        dp[a][i] = nr % 10;
    }
    dp[a][0] = max(dp[a][0], dp[b][0]);
    while(c){
        dp[a][++dp[a][0]] = c % 10;
        c /= 10;
    }
}

int main(){

    freopen("indep.in", "r", stdin);
    freopen("indep.out", "w", stdout);

    scanf("%d", &N);
    for(int i = 1; i <= N; ++i)
        scanf("%d", &v[i]);
    dp[0][0] = dp[0][1] = 1;
    dp[1][0] = 1;
    for(int i = 1; i <= N; ++i){
        for(int j = 1; j <= 1000; ++j){
            if(!dp[j][0]) continue;
            sum(gcd(v[i], j), j);
        }
        sum(v[i], 0);
    }
    for(int i = dp[1][0]; i > 0; --i)
        printf("%d", dp[1][i]);

    return 0;
}