Pagini recente » Cod sursa (job #49259) | Cod sursa (job #77068) | Cod sursa (job #706218) | Cod sursa (job #166032) | Cod sursa (job #61652)
Cod sursa(job #61652)
using namespace std;
#define nmax 505
#define bas 10
#define dmax 100
#include<stdio.h>
#include<fstream>
FILE *fin=fopen("indep.in","r"),
*fout=fopen("indep.out","w");
struct bignum
{
int n;
int x[dmax];
};
int a[nmax],c[nmax*2],n,i,j;
long long opt[nmax][nmax];
int cm,m=10000000;
int euclid(int a, int b)
{
int c;
while (b) {
c = a % b; a = b; b = c; }
return a;
}
int max(int a, int b)
{ if (a>b) return a; else return b; }
void add(bignum &a, bignum b, bignum c)
{
int t=0,i;
a.n=max(b.n,c.n);
for (i=1; i<=a.n; i++)
{
t+=b.x[i]+c.x[i];
a.n=t%bas;
t=t/bas;
}
if (t>0) { a.n++; a.x[a.n]=t; }
return;
}
int main()
{
fscanf(fin,"%d\n",&n);
for (i=1; i<=n; i++)
{
fscanf(fin,"%d\n",&a[i]);
if (a[i]>m) m=a[i];
c[a[i]]=1;
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m;j++)
{
cm=euclid(j,a[i]);
opt[i][cm]=opt[i-1][j]+opt[i-1][cm];
}
if (c[i]==1)
for (j=1; j<=m; j++) opt[i][j]=opt[i][j]+1;
}
// for (i=n; i>=1; i--)
fprintf(fout,"%lld\n",opt[n][1]);
/* for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++)
fprintf(fout,"%lld ",opt[i][j]);
fprintf(fout,"\n");
} */
fclose(fin);
fclose(fout);
return 0;
}