Cod sursa(job #12179)

Utilizator Ady.hAdrian Hada Ady.h Data 3 februarie 2007 05:30:02
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <math.h>

int prime[500],m,n,l; //m e radical de n, l e dimensiune vectorului prime
unsigned long long total;//numarul total de fractii existente

//algoritm pentru determinarea numerelor prime pana in 1000
int prim(int x)
{
if ((x==2)||(x==3)) return 1;
else{
int i,t=1;
for (i=2;i<=sqrt(x);i++)
	if (x%i==0) t=0;
return t;
}
}

int prim_mare(int x)
{
if (x<=1000) return prim(x);
else
{
int i;
i=0;
while (prime[i]!=0)
	{
	if (x%prime[i]==0) break;
	i++;
	}
if (prime[i]==0) return 1;
	else return 0;
}
}

int main()
{
FILE *pf;
int i,j;
pf=fopen("fractii.in","r");
fscanf(pf,"%d",&n);
fclose(pf);
m=(int)sqrt(n);
for (i=2;i<=m;i++)
	if (prim(i)) {
			prime[l]=i;
printf("\n%d",prime[l]);
			l++;
			}
prime[l]=0;
total=n*n;
for (i=0;i<l;i++)
	total=total-(n/prime[i])*(n/prime[i]);
for (i=0;i<l;i++)
	for (j=i+1;j<l;j++)
		total+=2*(n/(prime[i]*prime[j]));
for (i=m+1;i<=n;i++)
	if (prim_mare(i))
		{
		if (i<=n/2) total=total-(n/i)*(n/i);
			else total--;
		}
pf=fopen("fractii.out","w");
fprintf(pf,"%lld",total);
fclose(pf);
return 0;
}