Pagini recente » Cod sursa (job #2631575) | Cod sursa (job #2398284) | Cod sursa (job #1913006) | Cod sursa (job #204923) | Cod sursa (job #780054)
Cod sursa(job #780054)
#include<stdio.h>
FILE *f = fopen("indep.in","r");
FILE *g = fopen("indep.out","w");
#define MaxN 510
#define MaxP 3
#define MaxNrMari 2000
#define MaxA 1010
#define ll long long
#define baza 10
int N;
int A[MaxN],C[3] = {1,1};
int Best[MaxA][MaxNrMari];
void citire(void)
{
fscanf(f,"%d\n",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d ",&A[i]);
}
inline int cmmdc(int a,int b)
{
if(!b)
return a;
return cmmdc(b,a%b);
}
void Afisare(int Best[][MaxNrMari],int N)
{
for(int i=1;i<=N;i++,printf(" "))
{
if(Best[i][0] == 0)
printf("0");
else for(int j=Best[i][0];j;j--)
printf("%d",Best[i][j]);
}
printf("\n");
}
inline void Adunare(int A[],int B[])
{
int aux = 0,i;
for(i=1;i<=A[0] && i<=B[0];i++)
aux = aux+A[i]+B[i],A[i] = aux%baza,aux /= baza;
for(;i<=B[0];i++)
aux = aux+B[i],A[i] = aux%baza,aux /= baza;
for(;aux;i++)
aux = aux+A[i]+B[i],A[i] = aux%baza,aux /= baza;
if(A[0] < --i)
A[0] = i;
}
void Rezolvare(void)
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=1000;j++)
Adunare(Best[cmmdc(j,A[i])],Best[j]);
Adunare(Best[A[i]],C);
//Afisare(Best,10);
}
}
int main()
{
citire();
Rezolvare();
for(int i=Best[1][0];i;i--)
fprintf(g,"%d",Best[1][i]);
fprintf(g,"\n");
}