Pagini recente » Cod sursa (job #288832) | Cod sursa (job #21841) | Cod sursa (job #2011795) | Cod sursa (job #1354572) | Cod sursa (job #2611252)
#include <bits/stdc++.h>
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
int n,a[501];
int dp[2][1001][1001];
int one[1001],zero[1001];
int cmmdc(int a,int b)
{
int rest;
while(b)
{
rest=a%b;
a=b;
b=rest;
}
return a;
}
int adauga(int a[],int b[],bool del=false)
{
if(del)
{
for(int i=1;i<=a[0];i++)
a[i]=0;
a[0]=0;
}
int lung = max(a[0],b[0]);
for(int i=1;i<=lung && i<=b[0]+2;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
if(a[lung+1])
lung++;
a[0]=lung;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
in>>a[i];
one[0]=one[1]=1;
adauga(dp[0][ a[1] ],one);
for(int i=2;i<=n;i++)
{
for(int j=1;j<=1000;j++)
if(i%2)
adauga(dp[0][j],zero,true);
else
adauga(dp[1][j],zero,true);
for(int j=1;j<=1000;j++)
{
if(i%2)
{
adauga(dp[0][ cmmdc(j,a[i]) ],dp[1][j]);
adauga(dp[0][j],dp[1][j]);
}
else
{
adauga(dp[1][ cmmdc(j,a[i]) ],dp[0][j]);
adauga(dp[1][j],dp[0][j]);
}
}
if(i%2)
adauga(dp[0][ a[i] ],one);
else
adauga(dp[1][ a[i] ],one);
}
if(n%2)
{
if(dp[0][1][0])
for(int k=dp[0][1][0];k;k--)
out<<dp[0][1][k];
else
out<<'0';
}
else
{
if(dp[1][1][0])
for(int k=dp[1][1][0];k;k--)
out<<dp[1][1][k];
else
out<<'0';
}
return 0;
}