Pagini recente » Cod sursa (job #1378086) | Cod sursa (job #2039405) | Cod sursa (job #1248809) | Cod sursa (job #3238980) | Cod sursa (job #63030)
Cod sursa(job #63030)
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;
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 o;
int main()
{
fscanf(fin,"%d\n",&n);
int m=0;
for (i=1; i<=n; i++)
{
fscanf(fin,"%d\n",&a[i]);
if (a[i]>m) m=a[i];
c[a[i]]++;
}
for (j=1; j<=1000; j++) if (a[1]%j==0) opt[1][j]=1;
for (i=2; i<=n; i++)
{
for (j=1; j<=1000;j++)
{
cm=euclid(j,a[i]);
opt[i][cm]=opt[i-1][j]+opt[i-1][cm];
}
if (c[i]>0)
for (j=1; j<=1000; j++) opt[i][j]++;
}
fprintf(fout,"%lld\n",opt[n][1]);
fclose(fin);
fclose(fout);
return 0;
}