Pagini recente » Cod sursa (job #1523528) | Cod sursa (job #2169353) | Cod sursa (job #2031295) | Cod sursa (job #132680) | Cod sursa (job #1657504)
#include <stdio.h>
#include <algorithm>
using namespace std;
struct bigint
{
vector <int> t;
bigint () { t.resize(110); }
void clear() { t.clear(); t.resize(110); }
void init() { t[0]=1; }
void print()
{
for (int i=t[0];i>=1;i--) printf("%d ",t[i]);
printf("\n");
}
};
int n,nr,l;
int t[510];
bigint v,dp[2][1010];
inline int gcd(int a,int b)
{
if (b==0) return a; else
return gcd(b,a%b);
}
bigint operator + (bigint &a,bigint &b)
{
bigint c; int r=0; c.t[0]=max(a.t[0],b.t[0]);
for (int i=1;i<=c.t[0];i++) {
c.t[i]=(a.t[i]+b.t[i]+r)%10; r=(a.t[i]+b.t[i]+r)/10;
}
if (r>0) c.t[0]++,c.t[c.t[0]]=r;
return c;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&t[i]);
for (int j=1;j<=1000;j++) dp[0][j].init();
v.t[0]=v.t[1]=1; int l=1;
for (int i=1;i<=n;i++) {
for (int j=1;j<=1000;j++) { dp[l][j].clear(); dp[l][j].init(); }
for (int j=1;j<=1000;j++) {
dp[l][j]=dp[l][j]+dp[1-l][j];
dp[l][gcd(j,t[i])]=dp[l][gcd(j,t[i])]+dp[1-l][j];
}
dp[l][t[i]]=v+dp[l][t[i]];
l=1-l;
}
dp[1-l][1].print();
return 0;
}