Pagini recente » Cod sursa (job #2539838) | Cod sursa (job #2088771) | Cod sursa (job #577615) | Cod sursa (job #2331496) | Cod sursa (job #1514660)
#include <stdio.h>
using namespace std;
const int MAX = 1000;
long long d[501][1001];
int v[501];
/// d[i][j] = numarul de siruri pe care le poti face cu primele I elemente cu cmmdcul J
long long cmmdc(int a, int b)
{
int r = a % b;
while(r != 0)
{
a=b;
b=r;
r = a % b;
}
return b;
}
int main()
{
FILE *fin, *fout;
fin = fopen("indep.in", "r");
fout = fopen("indep.out", "w");
int n;
fscanf(fin,"%d",&n);
for(int i=1; i<=n; i++)
{
fscanf(fin,"%d",&v[i]);
}
d[1][v[1]]=1;
for(int i=2; i<=n; i++)
{
for(int j=1;j<=MAX;j++)
{
d[i][cmmdc(v[i],j)] += d[i-1][j];
}
for(int j=1; j<=MAX; j++)
{
d[i][j]+=d[i-1][j];
}
d[i][v[i]]++;
}
/// for de la 1 la MAX in care d[i][cmmdc(v[i],j)] = d[i-1][j];
//fprintf(fout,"%d\n%d\n", cmmdc(3, 4), cmmdc(543410, 340));
fprintf(fout,"%lld",d[n][1]);
return 0;
}