Pagini recente » Borderou de evaluare (job #2686265) | Cod sursa (job #511706) | Cod sursa (job #22322) | Borderou de evaluare (job #164101) | Cod sursa (job #3245270)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int NMAX=500;
int n;
int v[NMAX+5];
int dp[2*NMAX+5][2*NMAX+5];
void adunare(int x, int y){
dp[x][0] = max(dp[x][0], dp[y][0]);
int t = 0;
for(int i = 1;i<=dp[x][0];i++){
t+=dp[x][i]+dp[y][i];
dp[x][i]=t%10;
t/=10;
}
while(t != 0){
dp[x][0]++;
dp[x][dp[x][0]]=t%10;
t/=10;
}
}
signed main(){
fin>>n;
for(int i=1;i<=n;i++){
fin>>v[i];
}
dp[0][0]=dp[0][1]=1;
for(int i=1;i<=n;i++){
for(int j = 1; j<=1000; j++){
int gcd = __gcd(j, v[i]);
adunare(gcd, j);
}
adunare(v[i], 0);
}
if(dp[1][0] == 0){
fout<<0;
}else{
for(int i=dp[1][0];i>=1;i--){
fout<<dp[1][i];
}
}
}