Pagini recente » Cod sursa (job #489002) | Cod sursa (job #1568128) | Cod sursa (job #1711535) | Cod sursa (job #1381667) | Cod sursa (job #1149405)
#include<cstdio>
#include<cstring>
using namespace std;
#define NMAX 501
#define BASE 1000000000
#define VMAX 1001
int N , v[NMAX] ;
struct huge{
int nr[200];
}D[VMAX] , unu;
inline void add(huge &A , huge B)
{
int t = 0 , p = 1;
for( p = 1 ; p <= A.nr[0] || p <= B.nr[0] || t ; ++p , t/=BASE)
{
t += A.nr[p] + B.nr[p];
A.nr[p] = t%BASE;
}
A.nr[0] = p-1;
}
inline int gcd(int a , int b)
{
while(b)
{
int r = a%b;
a = b;
b = r;
};
return a;
}
void tipar(huge A)
{
printf("%d" , A.nr[A.nr[0]]);
for(int i = A.nr[0]-1 ; i ; i-- )
printf("%09d" , A.nr[i]);
}
int main()
{
freopen("indep.in" , "r" , stdin );
freopen("indep.out" , "w" , stdout );
scanf("%d" , &N );
for(int i = 1 ; i <= N ; ++i )
scanf("%d" , &v[i]);
unu.nr[1] = unu.nr[0] = 1;
for(int i = 1 ; i <= N ; ++i)
{
for(int k = 1 ; k < VMAX ; ++k )
add( D[gcd(k,v[i])] , D[k]);
add(D[v[i]],unu);
}
tipar(D[1]);
return 0;
}