Pagini recente » Cod sursa (job #407489) | Cod sursa (job #3204320) | Cod sursa (job #135347) | Cod sursa (job #2890563) | Cod sursa (job #1771406)
#include <fstream>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int MAXN = 510;
const int MAXNR = 1005;
const int MAXCIF = 10000;
using NrMare = int[MAXCIF];
int N;
int a[MAXN];
NrMare D[MAXNR];
int maxim;
NrMare unu;
void Read();
void Solve();
int Cmmdc( int a, int b );
void Add( NrMare a, NrMare b );
void Write();
int main()
{
Read();
Solve();
Write();
fin.close();
fout.close();
return 0;
}
void Read()
{
int i;
fin >> N;
for ( i = 1; i <= N; i++ )
{
fin >> a[i];
maxim = max(maxim, a[i]);
}
}
void Solve()
{
int i, j;
unu[0] = unu[1] = 1;
for ( i = 1; i <= N; i++ )
{
for ( j = 1; j <= maxim; j++ )
if ( D[j] > 0 )
Add(D[Cmmdc(j, a[i])], D[j]);
Add(D[a[i]], unu);
}
}
int Cmmdc( int a, int b )
{
int rest;
do
{
rest = a % b;
a = b;
b = rest;
} while ( rest != 0 );
return a;
}
void Add( NrMare a, NrMare b )
{
int cif, t = 0, i;
for ( i = 1; i <= max(a[0], b[0]); i++ )
{
cif = t + a[i] + b[i];
a[i] = cif % 10;
t = cif / 10;
}
a[0] = max( a[0], b[0] );
while ( t )
a[++a[0]] = t % 10, t /= 10;
}
void Write()
{
int i;
for ( i = D[1][0]; i >= 1; i-- )
fout << D[1][i];
fout << '\n';
}