Pagini recente » Cod sursa (job #3033163) | Cod sursa (job #2646418) | Cod sursa (job #214027) | Cod sursa (job #1549312) | Cod sursa (job #12179)
Cod sursa(job #12179)
#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;
}