Pagini recente » Cod sursa (job #1299994) | Cod sursa (job #187721) | Cod sursa (job #838447) | Cod sursa (job #97799) | Cod sursa (job #162135)
Cod sursa(job #162135)
#include <iostream>
#include <string>
#define FIN "indep.in"
#define FOUT "indep.out"
#define MAX_N 500
#define MAX_VAL 1000
#define MAX_CIF 1000
using namespace std;
int dyn[2][MAX_VAL+1][MAX_CIF+1];
int n;
int v[MAX_N+1];
int d2[2][MAX_VAL];
void iofile(void){
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d",&n);
for (int i=1,x;i<=n;i++){
scanf("%d",&v[i]);
}
fclose(stdin);
return ;
}
int gcd(int a,int b){
int r;
while (b){
r=(a%b);
a=b;
b=r;
}
return a;
}
void adun(int *a,int *b){
int x,i=1,t=0;
while (i<=a[0] && i<=b[0]){
x=a[i]+b[i]+t;
a[i]=x%10;
t=x/10;
i++;
}
if (i<=a[0]){
while (i<=a[0]) {
x=a[i]+t;
a[i]=x%10;
t=x/10;
i++;
}
} else while (i<=b[0]){
x=b[i]+t;
a[i]=x%10;
t=x/10;
i++;
}
a[0]=i-1;
if (t){
a[++a[0]]=t;
}
return ;
}
void dinamica(void){
int ind=0;
/*for (ind=0;ind<=1;ind++){
for (int i=1;i<=MAX_VAL;i++){
dyn[ind][i][0]=1;
dyn[ind][i][1]=0;
}
}
ind=0; */
for (int i=1;i<n;i++){
dyn[ind][v[i]][0]=1;dyn[ind][v[i]][1]=1; d2[ind][v[i]]=1;
for (int j=1;j<=MAX_VAL;j++){
dyn[1-ind][j][0]=1;
dyn[1-ind][j][1]=0;
d2[1-ind][j]=0;
}
for (int j=1;j<=MAX_VAL;j++){if (dyn[ind][j][0]>1 || dyn[ind][j][1]>0){
adun(dyn[1-ind][j],dyn[ind][j]);
adun(dyn[1-ind][gcd(j,v[i+1])],dyn[ind][j]);
}
if (d2[ind][j]>0){
d2[1-ind][j]+=d2[ind][j];
d2[1-ind][gcd(j,v[i+1])]+=d2[ind][j];
}
}
ind=1-ind;
}
/*for (int i=dyn[ind][1][0];i>=1;i--){
printf("%d",dyn[ind][1][i]);
}*/printf("%d",d2[ind][1]);
printf("\n");
fclose(stdout);
return ;
}
int main(void){
iofile();
dinamica();
return 0;
}