Pagini recente » Cod sursa (job #2724847) | Cod sursa (job #699005) | Cod sursa (job #2196595) | Cod sursa (job #1680186) | Cod sursa (job #827873)
Cod sursa(job #827873)
#include <cstdio>
#include <cstring>
using namespace std;
const int baza = 1000000000;
short int v[505];
int D[1005][505];
int maxval,n;
int unu[505] = {1,1};
inline int gcd(int a,int b)
{
if(a<b)
return gcd(b,a);
if(!b)
return a;
int r = a % b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;
}
void aduna(int *a,int *b)
{
int i,t;
for(i=1,t=0;i<=a[0] || i <= b[0] || t;++i,t/=baza)
a[i] = (t+=a[i]+b[i])%baza;
a[0]=i-1;
}
void solve()
{
int i,j;
for(i=1;i<=n;++i)
{
for(j=1;j<=maxval;++j)
aduna(D[gcd(v[i],j)],D[j]);
aduna(D[v[i]],unu);
}
}
void print(int *d)
{
printf("%d",d[d[0]]);
int i = d[0]-1;
for(;i;--i)
printf("%.9d",d[i]);
printf("\n");
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
int i;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",v+i);
if(v[i]>maxval)
maxval=v[i];
}
solve();
print(D[1]);
return 0;
}