Pagini recente » Cod sursa (job #277510) | Cod sursa (job #702335) | Cod sursa (job #2830403) | Cod sursa (job #2672152) | Cod sursa (job #1375123)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int nmax= 500;
const int vmax= 1000;
const int base= 10000;
int v[nmax+5];
vector <int> d[nmax+5][vmax+5];
int gcd( int x, int y ) {
if ( y==0 )
return x;
return gcd( y, x%y );
}
void h_write( vector <int> &x ) {
fout<<x.back();
for ( int i= (int)x.size()-2; i>=0; --i ) {
if ( x[i]<10 ) fout<<"000";
else if ( x[i]<100 ) fout<<"00";
else if ( x[i]<1000 ) fout<<"0";
fout<<x[i];
}
fout<<"\n";
}
void hh_add( vector <int> &x, vector <int> &y ) {
for ( int i= 0, t= 0; i<(int)x.size() || i<(int)y.size() || t!=0; ++i ) {
if ( i>=(int)x.size() ) {
x.push_back(0);
}
if ( i<(int)y.size() ) {
x[i]+= y[i];
}
x[i]+= t;
t= x[i]/base;
x[i]%= base;
}
}
int main( ) {
int n;
fin>>n;
for ( int i= 1; i<=n; ++i ) {
fin>>v[i];
}
vector <int> aux;
aux.push_back(1);
for ( int i= 1; i<=n; ++i ) {
hh_add(d[i][v[i]], aux);
for ( int j= 1; j<=vmax; ++j ) {
int cmmdc= gcd(v[i+1], j);
hh_add(d[i+1][j], d[i][j]);
hh_add(d[i+1][cmmdc], d[i][j]);
}
}
h_write(d[n][1]);
return 0;
}