Pagini recente » Cod sursa (job #2210396) | Cod sursa (job #2572656) | Cod sursa (job #474334) | Cod sursa (job #911655) | Cod sursa (job #1599439)
#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 15
#define maxn 501
#define maxx 1001
int N, a[maxn] ;
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 ;
for(int i = 1; i <= max( v[0], w[0] ) || t > 0; ++i )
{
v[i] = ( v[i] + w[i] + t ) % baza ;
t = ( v[i] + w[i] + t ) / baza ;
v[0] = i ;
}
}
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 ;
}
void calc()
{
cin >> N ;
for(int i = 1; i <= N; ++i)
{
int x ;
cin >> x ;
for(int j = 1; j < maxx; ++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 ;
}