Pagini recente » Cod sursa (job #1074295) | Cod sursa (job #2172665) | Cod sursa (job #2768475) | Cod sursa (job #2489511) | Cod sursa (job #1660385)
#include <cstdio>
#include <algorithm>
#define vmax 1005
using namespace std;
int n,g[vmax][vmax];
int d[vmax][vmax],s[vmax][vmax];
int gcd(int i,int j)
{
if (j==0)
return i;
if (g[i][j])
return g[i][j];
return gcd(j,i%j);
}
void calculategcd()
{
int i,j;
for (i=1;i<vmax;i++)
for (j=1;j<=i;j++) {
g[i][j]=gcd(i,j);
g[j][i]=g[i][j];
}
}
void sum(int a[],int b[])
{
int i;
a[0]=max(a[0],b[0]);
for (i=1;i<=b[0];i++) {
a[i]+=b[i];
}
a[0]++;
for (i=1;i<=a[0];i++)
if (a[i]>9) {
a[i+1]+=a[i]/10;
a[i]%=10;
}
if (a[a[0]]==0)
a[0]--;
}
void clearing(int a[])
{
int i;
for (i=a[0];i>=0;i--)
a[i]=0;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
int i,j,a;
calculategcd();
for (i=1;i<=n;i++) {
scanf("%d",&a);
d[a][0]=d[a][1]=1;
for (j=0;j<vmax;j++)
sum(d[g[j][a]],s[j]);
for (j=0;j<vmax;j++) {
sum(s[j],d[j]);
clearing(d[j]);
}
}
for (i=s[1][0];i>=1;i--)
printf("%d",s[1][i]);
if (s[1][0]==0)
printf("0\n");
return 0;
}