Pagini recente » Atasamentele paginii 7_martie_simulare_oji_2024_clasele_11_12 | Diferente pentru utilizator/catalincraciun intre reviziile 12 si 10 | Cod sursa (job #2266544) | Istoria paginii utilizator/tudorfrent | Cod sursa (job #2017367)
#include <stdio.h>
#include <stdlib.h>
#define C 150
//char ciur[1001];
int f[1001];
int log[170][C+1],rez[C+1],aux[1001],s[C+1];
void scad(int a[],int b[])
{
int i,o;
o=0;
for(i=C; i>0; i--)
{
a[i]=a[i]+10-b[i]-o;
o=1-a[i]/10;
a[i]%=10;
}
}
void add(int a[],int b[])
{
int i,o=0;
for(i=C; i>0; i--)
{
a[i]+=b[i];
o=a[i]/10;
a[i]%=10;
}
}
int main()
{
/*int i,j,nr;
for(i=2; i*i<=1000; i++)
if(ciur[i]==0)
for(j=i*i; j<=1000; j+=i)
ciur[j]=1;
nr=0;
for(i=2; i<=1000; i++)
if(ciur[i]==0)
nr++;
printf("%d\n",nr); 168 de numere prime pana la 100*/
long long nr=0;
int i,j,o,z,n,x,cmmdc,r;
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
log[0][C]=1;
for(i=1; i<170; i++)
{
for(j=1; j<=C; j++)
log[i][j]=log[i-1][j];
o=0;
for(j=C; j>0; j--)
{
z=log[i][j]*2+o;
o=z/10;
z%=10;
log[i][j]=z;
}
}
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&x);
f[x]++;
}
for(i=1; i<=C; i++)
rez[i]=log[n][i];
nr=n+1;
for(i=2; i<=1000; i++)
{
z=0;
for(j=i; j<=1000; j+=i)
if(f[j])
{
z++;
aux[z]=j;
}
cmmdc=aux[1];
for(j=2; j<=z; j++){
aux[j]/=i;
while(aux[j])
{
r=cmmdc%aux[j];
cmmdc=aux[j];
aux[j]=r;
}
}
if(z>1 && cmmdc==1)
{
scad(rez,log[z]);
nr=nr-z-1;
}
}
if(nr>=0)
{
nr=abs(nr);
for(i=C; i>0 && nr; i--)
{
s[i]=nr%10;
nr/=10;
}
scad(rez,s);
}
else
{
nr=abs(nr);
for(i=C; i>0 && nr; i--)
{
s[i]=nr%10;
nr/=10;
}
add(rez,s);
}
for(i=1; rez[i]==0; i++);
while(i<=C)
printf("%d",rez[i++]);
return 0;
}