Pagini recente » Cod sursa (job #2786646) | Cod sursa (job #740051) | Cod sursa (job #1867630) | Cod sursa (job #909945) | Cod sursa (job #1232666)
#include <fstream>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
int N,Array[1005];
int DP[1005][1005][105];
int Result[10005];
void Read()
{
int i;
f>>N;
for(i=1;i<=N;i++)
f>>Array[i];
}
void add(int A[], int 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;
}
int CMMDC(int a,int b)
{
int rest=a%b;
while(rest!=0)
{
a=b;
b=rest;
rest=a%b;
}
return b;
}
void solveDinamic()
{
int i,j;
for(i=0;i<=N;i++)
for(j=1;j<=1000;j++)
DP[i][j][0]=1;
DP[1][Array[1]][1]=1;
for(i=1;i<=N;i++)
{
DP[i][Array[i]][1]=1;
for(j=1;j<=1000;j++)
{
add(DP[i][j],DP[i-1][j]);
add(DP[i][CMMDC(Array[i],j)],DP[i-1][j]);
}
}
}
void Print()
{
int i;
Result[0]=1;
add(Result,DP[N][1]);
for(int i=Result[0];i>=1;i--)
g<<Result[i];
}
int main()
{
Read();
solveDinamic();
Print();
return 0;
}