Pagini recente » Cod sursa (job #2846617) | Cod sursa (job #2204123) | Cod sursa (job #2070183) | Cod sursa (job #2162509) | Cod sursa (job #5117)
Cod sursa(job #5117)
# include <stdio.h>
//# include <conio.h>
const int NRMAXLEN=100;
typedef int NUMAR[NRMAXLEN+1];
NUMAR c[1000+1];
int n;
int cmmdc(int a, int b)
{
int r;
if (a<b) {r=b;b=a;a=r;}
r=a%b;
while (r) {a=b;b=r;r=a%b;}
return b;
}
void inmulteste_2_c(int k)
{
int i;
for (i=1;i<=c[k][0];i++) c[k][i]*=2;
i=1;
while (c[k][i]>0||i<=c[k][0])
if (c[k][i]>=10) {c[k][i+1]++;c[k][i]-=10;i++;}
else i++;
if (i-1>c[k][0]) c[k][0]=i-1;
}
void incrementeaza_c(int k)
{
int i;
c[k][1]++;i=1;
while (c[k][i]>=10) {c[k][i+1]++;c[k][i]-=10;i++;}
if (i>c[k][0]) c[k][0]=i;
}
void aduna_c(int dest, int sursa)
{
int i=1;
while (i<=c[sursa][0]) {c[dest][i]+=c[sursa][i];i++;}
if (c[dest][0]<c[sursa][0]) c[dest][0]=c[sursa][0];
i=1;
while (c[dest][i]>0||i<=c[dest][0])
if (c[dest][i]>=10) {c[dest][i+1]++;c[dest][i]-=10;i++;}
else i++;
if (i-1>=c[dest][0]) c[dest][0]=i-1;
}
void compute()
{
FILE *f=fopen("indep.in","r");
fscanf(f,"%d",&n);int i,j,x,cm;
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
incrementeaza_c(x);
for (j=1;j<=1000;j++) //AICI!!!! 1000
if (j!=x&&c[j][0])
{
cm=cmmdc(x,j);
if (cm==j) inmulteste_2_c(j);
else if (cm==x) inmulteste_2_c(x);
else incrementeaza_c(cm);
}
}
fclose(f);
}
void scrie()
{
FILE *g=fopen("indep.out","w");
int i;
for (i=c[1][0];i>=1;i--) fprintf(g,"%d",c[1][i]);
fprintf(g,"\n");
fclose(g);
}
/*void scrie_e()
{
int i;
for (i=c[1][0];i>=1;i--) printf("%d",c[1][i]);
printf("\n");
}*/
int main()
{
compute();
scrie();
return 0;
}
/*int main()
{
clrscr();
int i=1;printf("alege operatiile: 1-aduna 1, 2-inmulteste cu 2, 0-termina");
while (i)
{
printf("\noperatia: ");
scanf("%d",&i);
if (i==1) incrementeaza_c(1);
else if (i==2) inmulteste_2_c(1);
else break;
}
scrie_e();
return 0;
}
*/