Pagini recente » Cod sursa (job #1246367) | Cod sursa (job #3040549) | Cod sursa (job #1277319)
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int NMAX = 1005, BASE = 1000000000;
int N, V[ NMAX ] , din[ NMAX ] [ 110 ] , tmp [ 110 ] ;
int GCD( int A , int B )
{
if( not B ) return A;
return GCD( B , A % B ) ;
}
void SUM( int A [ 110 ] , int B [ 110 ] )
{
int i, T = 0;
for(i = 1; i <= A[0] || i <= B[0] || T ; ++ i, T /= BASE )
A[i] = (T += A[i] + B[i]) % BASE;
A[0] = i - 1;
}
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 ) ;
tmp [ 0 ] = tmp [ 1 ] = 1 ;
for( int i = 1 ; i <= N ; ++ i )
{
for( int j = 1 ; j <= 1000 ; ++ j )
SUM ( din [ GCD ( j , V [ i ] ) ] , din [ j ] ) ;
SUM ( din [ V [ i ] ] , tmp ) ;
}
if ( din [ 1 ] [ 0 ] == 0 ) printf( "0\n" ) ;
else
{
printf ( "%d" , din [ 1 ] [ din [ 1 ] [ 0 ] ] );
for( int i = din [ 1 ] [ 0 ] - 1; i ; -- i)
printf( "%09d" , din [ 1 ] [ i ] ) ;
printf( "\n" ) ;
}
return 0;
}