Pagini recente » Cod sursa (job #1977636) | Cod sursa (job #1356337) | Cod sursa (job #2128617) | Cod sursa (job #1874955) | Cod sursa (job #907475)
Cod sursa(job #907475)
#include <cassert>
#include <cstdio>
#include <algorithm>
using namespace std;
#define Sigma 100000000
#define max_nr 1000
#define nr_cif 200
int i,j,n,x;
struct NrMare{
int Cif[nr_cif],NrCif;
NrMare(){
NrCif=1;
for( int i=0; i<nr_cif; ++i )
Cif[i]=0;
}
NrMare( int _nr ){
NrCif=1;
for( int i=0; i<nr_cif; ++i )
Cif[i]=0;
Cif[0]=_nr;
}
void add( NrMare right ){
int i,t=0;
for( i=0; i<max( NrCif, right.NrCif ); ++i ){
Cif[i]+=right.Cif[i]+t;
t=0;
while( Cif[i] >= Sigma ){
Cif[i]-=Sigma;
t++;
}
}
NrCif=max( NrCif, right.NrCif );
if( t ){
Cif[ NrCif ]=t;
NrCif++;
}
}
void afisare(){
for( int i=NrCif-1; i>=0; --i )
printf("%d",Cif[i]);
printf("\n");
}
} Dp[max_nr],NrMareUnu(1);
int gcd( int a, int b ){
if( !b ) return a;
return gcd( b, a%b );
}
int main(){
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d", &n );
for( i=1; i<=n; ++i ){
scanf("%d", &x );
for( j=1; j<max_nr; ++j ){
Dp[gcd(x,j)].add(Dp[j]);
}
Dp[x].add(NrMareUnu);
}
NrMare Rez(0);
Dp[1].afisare();
return 0;
}