Pagini recente » Cod sursa (job #2820990) | Cod sursa (job #2715686) | Cod sursa (job #3135517) | Cod sursa (job #2808438) | Cod sursa (job #124072)
Cod sursa(job #124072)
#include <stdio.h>
#include <vector>
using namespace std;
#define NMAX 512
#define TMAX 1002
#define bs 1000000000
#define sz size()
#define pb push_back
int v[NMAX];
int mx,n,i,j,k;
vector<unsigned int> nou[TMAX],old[TMAX];
vector<unsigned int> aux;
vector<unsigned int> add(vector<unsigned int> t1, vector<unsigned int> t2)
{
unsigned int t=0,i;
vector<unsigned int> rez;
rez.clear();
for (i=0;(i<t1.sz)||(i<t2.sz)||(t);i++)
{
if (i<t1.sz) t=t+t1[i];
if (i<t2.sz) t=t+t2[i];
rez.pb(t%bs);
t/=bs;
}
return rez;
}
int gcd(int x,int y)
{
int a,b,r;
a=x;b=y;
r=a%b;
a=b;
b=r;
while (r)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
mx=0;
for (i=1;i<=n;i++)
{
scanf("%d",&v[i]);
if (mx<v[i]) mx=v[i];
}
for (i=1;i<=mx;i++)
vector<unsigned int>().swap(old[i]);
old[ v[1] ].pb(1);
nou[ v[1] ].pb(1);
aux.clear();
aux.pb(1);
for (i=2;i<=n;i++)
{
/* for (j=1;j<=mx;j++)
if (j==v[i]) {
// vector<int>().swap(nou[j]);
nou[j].clear();
nou[j].pb(1);
}
else //vector<int>().swap(nou[j]);
nou[j].clear();*/
nou[ v[i] ] = add(nou[ v[i] ],aux);
/*for (j=1;j<=mx;j++)
nou[j]=add(old[j],nou[j]);*/
for (j=1;j<=mx;j++)
{
k=gcd(j,v[i]);
nou[k] = add(nou[k],old[j]);
}
for (j=1;j<=mx;j++)
old[j]=nou[j];
}
if (old[1].sz==0) {printf("0\n");return 0;}
printf("%lu",old[1][ old[1].sz -1 ]);
for (i=old[1].sz-2;i>=0;i--)
printf("%08lu",old[1][i]);
printf("\n");
return 0;
}