Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 35 si 34 | Urmasii lui Moisil 2015, Clasament Clasa a 9-a | Cod sursa (job #603154) | Cod sursa (job #564010) | Cod sursa (job #753577)
Cod sursa(job #753577)
#include <fstream>
using namespace std;
ifstream in ("indep.in");
ofstream out("indep.out");
int const N=505;
int const M=1005;
int n,v[N],num[M][202];
inline int cmmdc(int a, int b)
{
if (b == 0) return a;
return cmmdc(b, a % b);
}
void add (int pos1, int pos2)
{
int i,t=0;
for(i=1;i<=num[pos1][0] || i<=num[pos2][0] || t; i++, t/=10)
num[pos1][i]=(t+=num[pos1][i]+num[pos2][i])%10;
num[pos1][0]=i-1;
}
int main()
{
num[0][0] = num[0][1] = 1;
in>>n;
//for(int i=1;i<=n;i++)
//in>>v[i];
for (int i = 1; i <= n; ++i)
{
in>>v;
for (int j = 1; j <= 1000; ++j)
add(cmmdc(v,j),j); //num[cmmdc(V[i],j)]+=num[j];
//add(cmmdc(v[i],j),j); //num[cmmdc(V[i],j)]+=num[j];
add(v,0); //num[V[i]]+=num[0];
//add(v[i],0); //num[V[i]]+=num[0];
}
if (num[1][0] == 0) num[1][0] = 1;
for(int i=num[1][0];i>=1;--i)
out<<num[1][i];
in.close();
out.close();
return 0;
}