Pagini recente » Cod sursa (job #2052952) | Cod sursa (job #1738776) | Cod sursa (job #2806474) | Cod sursa (job #2880848) | Cod sursa (job #507506)
Cod sursa(job #507506)
#include <fstream>
using namespace std;
int v[1<<9],n;
char a[2][1<<10][1<<8],unu[1<<8];
ifstream in("indep.in");
ofstream out("indep.out");
void add(char a[],char b[])
{
int i,t=0;
for (i=1;i<=a[0] || i<=b[0] || t;i++,t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
void scrie(char v[])
{
if (!v[0])
out<<"0\n";
for (int i=v[0];i;i--)
out<<(int)v[i];
out<<"\n";
}
int cmmdc(int a,int b)
{
int c;
while (b)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int i,j;
in>>n;
for (i=1;i<=n;i++)
in>>v[i];
unu[0]=unu[1]=1;
a[1][v[1]][0]=a[1][v[1]][1]=1;
for (i=2;i<=n;i++)
{
memset(a[i&1],0,sizeof(a[i&1]));
for (j=1;j<(1<<10);j++)
add(a[i&1][cmmdc(j,v[i])],a[(i-1)&1][j]);
add(a[i&1][v[i]],unu);
for (j=1;j<(1<<10);j++)
add(a[i&1][j],a[(i-1)&1][j]);
}
scrie(a[n&1][1]);
return 0;
}