Pagini recente » Cod sursa (job #2890033) | Cod sursa (job #1200316) | Cod sursa (job #1212372) | Cod sursa (job #678080) | Cod sursa (job #2089874)
#include<bits/stdc++.h>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
int n,v[502];
int mat[3][1002][1002];
int l[3][1002];
int maxgcd[1002];
int gcd(int a, int b)
{
while(b)
{
int c=a%b;
a=b;
b=c;
}
return a;
}
void ipar(int nr)
{
memset(mat[2],0,sizeof(mat[2]));
memset(l[2],0,sizeof(l[2]));
for(int i=1;i<=1000;++i){
int cd=gcd(i,nr);
if(l[1][i]){
for(int j=1;j<=l[1][i];++j)
mat[2][i][j]+=mat[1][i][j];
l[2][i]=max(l[2][i],l[1][i]);
for(int j=1;j<=l[1][i];++j)
mat[2][cd][j]+=mat[1][i][j];
l[2][cd]=max(l[2][cd],l[1][i]);
}
}
l[2][nr]=max(l[2][nr],1);
mat[2][nr][1]++;
for(int i=1;i<=1000;++i){
for(int j=1;j<=l[2][i];++j)
{
mat[2][i][j+1]+=mat[2][i][j]/10;
mat[2][i][j]%=10;
if(mat[2][i][j+1] && j==l[2][i])
++l[2][i];
}
}
}
void impar(int nr)
{
memset(mat[1],0,sizeof(mat[1]));
memset(l[1],0,sizeof(l[1]));
for(int i=1;i<=1000;++i){
int cd=gcd(i,nr);
if(l[2][i]){
for(int j=1;j<=l[2][i];++j)
mat[1][i][j]+=mat[2][i][j];
l[1][i]=max(l[1][i],l[2][i]);
for(int j=1;j<=l[2][i];++j)
mat[1][cd][j]+=mat[2][i][j];
l[1][cd]=max(l[1][cd],l[2][i]);
}
}
l[1][nr]=max(l[1][nr],1);
mat[1][nr][1]++;
for(int i=1;i<=1000;++i){
for(int j=1;j<=l[1][i];++j)
{
mat[1][i][j+1]+=mat[1][i][j]/10;
mat[1][i][j]%=10;
if(mat[1][i][j+1] && j==l[1][i])
++l[1][i];
}
}
}
int main()
{
f>>n;
for(int i=1;i<=n;++i)
f>>v[i];
mat[1][v[1]][1]=1;
l[1][v[1]]=1;
for(int i=2;i<=n;++i)
{
if(i%2==0)
ipar(v[i]);
else
impar(v[i]);
}
if(n%2==0)
for(int j=l[2][1];j>=1;--j)
g<<mat[2][1][j];
else
for(int j=l[1][1];j>=1;--j)
g<<mat[1][1][j];
return 0;
}