Pagini recente » Cod sursa (job #2163340) | Cod sursa (job #2842428) | Cod sursa (job #3185738) | Cod sursa (job #2804051) | Cod sursa (job #1599488)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<cmath>
#include<climits>
#include<ctime>
#include<iomanip>
using namespace std ;
#define baza 1000000000
#define maxcc 50
#define maxx 1010
int N ;
int sol[maxx][maxcc], unu[maxcc] ;
int gcd(int a, int b)
{
if( a == 0 || b == 0 )
return a + b ;
if( a > b )
return gcd( a % b, b ) ;
return gcd( a, b % a ) ;
}
void adunare(int v[maxcc], int w[maxcc])
{
int t = 0, i = 1 ;
for(; i <= v[0] || i <= w[0] || t > 0; ++i, t = t / baza )
{
t = ( v[i] + w[i] + t ) ;
v[i] = t % baza ;
}
v[0] = i - 1 ;
}
void printare(int v[])
{
cout << v[ v[0] ] ;
for(int i = v[0] - 1; i > 0; --i )
printf("%09d", v[i]);
}
void init()
{
unu[0] = unu[1] = 1 ;
for(int i = 1; i <= 1000; ++i)
sol[i][0] = 1 ;
}
void calc()
{
cin >> N ;
for(int i = 1; i <= N; ++i)
{
int x ;
cin >> x ;
for(int j = 1; j < 1001; ++j )
{
int gg = gcd(x, j) ;
adunare( sol[gg], sol[j] ) ;
}
adunare( sol[x], unu ) ;
}
}
int main()
{
std::ios_base::sync_with_stdio(false) ;
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
init() ;
calc() ;
printare( sol[1] ) ;
return 0 ;
}