Pagini recente » Cod sursa (job #643044) | Cod sursa (job #2113553) | Cod sursa (job #2295056) | Cod sursa (job #2331391) | Cod sursa (job #774589)
Cod sursa(job #774589)
#include <fstream>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
const short C=101;
int n, v[501], d[2][1001][C];
int cmmdc (int a, int b)
{
if(b == 0)
return a;
else if(a%b == 0)
return b;
else
return cmmdc(b, a%b);
}
void suma (int x[C], int y[C])
{
int i, aux, t=0;
for(i=1 ; i<=x[0] || i<=y[0] || t!=0 ; i++)
{
aux = t + x[i] + y[i];
x[i] = aux % 10;
t = aux / 10;
}
x[0] = i - 1;
}
void afisare (int x[C])
{
for(int i=x[0] ; i>0 ; i--)
g<<x[i];
}
void reinit (int a)
{
int i, j;
for(i=1 ; i<=1000 ; i++)
for(j=0 ; j<C ; j++)
d[a][i][j] = 0;
}
int main()
{
int i, j, c;
bool i1, i2;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
d[0][0][0] = d[0][0][1] = 1;
for(i=1 ; i<=n ; i++)
{
i1 = i%2;
i2 = 1 - i1;
reinit(i1);
for(j=0 ; j<=1000 ; j++)
{
c = cmmdc(v[i], j);
suma(d[i1][c], d[i2][j]);
}
for(j=0 ; j<=1000 ; j++)
suma(d[i1][j], d[i2][j]);
}
afisare(d[n%2][1]);
f.close();
g.close();
return 0;
}