Pagini recente » Cod sursa (job #1776123) | Cod sursa (job #992272) | Cod sursa (job #2657981) | Cod sursa (job #1743714) | Cod sursa (job #1256121)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <climits>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
#define COST 1002
#define MAX 501
#define baza 1000000000000000000LL
#define L 10
typedef long long huge[L];
int a[MAX], n;
huge aux;
void add(huge a, huge b, huge c)
{
memset(aux, 0, sizeof(aux));
int t=0, i;
aux[0]=max(a[0], b[0]);
for(i=1;i<=aux[0];i++)
{
aux[i]=a[i]+b[i]+t;
if(aux[i]>=baza)
{
t=1;
aux[i]-=baza;
}
else
{
t=0;
}
}
if(t)
{
aux[0]++;
aux[aux[0]]++;
}
memcpy(c, aux, sizeof(aux));
}
void afi(long long x, int b)
{
if(b)
{
afi(x/10, b-1);
fout << x%10;
}
}
void af(huge a)
{
if(!a[0])
{
fout << "0\n";
return;
}
fout<<a[a[0]];
for(int i=a[0]-1;i>=1;i--)
{
afi(a[i], log10(baza));
}
fout << "\n";
}
huge b[3][COST];
int main()
{
int i, j;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
}
for(i=1;i<=n;i++)
{
memset(b[i&1], 0, sizeof(b[i&1]));
b[i&1][a[i]][0]=b[i&1][a[i]][1]=1;
for(j=1;j<=COST;j++)
{
add(b[i&1][j], b[(i-1)&1][j], b[i&1][j]);
add(b[i&1][__gcd(j, a[i])], b[(i-1)&1][j], b[i&1][__gcd(j, a[i])]);
}
}
af(b[n&1][1]);
}