Pagini recente » Cod sursa (job #2473145) | Cod sursa (job #1351745) | Cod sursa (job #893604) | Cod sursa (job #20109) | Cod sursa (job #1256142)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
#define COST 1002
#define MAX 501
#define baza 1000000000
#define L 18
typedef int huge[L];
int a[MAX], n;
huge aux;
void add(huge a, huge b, huge c)
{
int t=0, i;
c[0]=max(a[0], b[0]);
for(i=1;i<=c[0];i++)
{
c[i]=a[i]+b[i]+t;
if(c[i]>=baza)
{
t=1;
c[i]-=baza;
}
else
{
t=0;
}
}
if(t)
{
c[0]++;
c[c[0]]=1;
}
}
void afi(int 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 gcd(int a, int b)
{
if(!b)
return a;
return gcd(b, a%b);
}
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]);
}