Cod sursa(job #302112)

Utilizator vlad_olteanVladimir Oltean vlad_oltean Data 8 aprilie 2009 17:35:49
Problema Fractii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <stdio.h>
#define N 1000002

int n;
long long sum;
bool div[N];
bool neprim[N];

int main()
{
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	scanf("%d",&n);
	
	for(int i=2;i*i<=n;i++)
		if(!neprim[i])
			for(int j=i*i;j<=n;j+=i)
				neprim[j]=1;
	
	sum=(long long)(n*(n-1)+1);
	for(int i=2;i<=n;i++)		//fiecare nivel
		if(neprim[i])
		{	for(int j=2;j<=i;j++)	//caut divizorii
				if(i%j==0&&!neprim[j])			//divizibil
				{	for(int k=j;k<i;k+=j)	//marchez multiplii
						div[k]=1;
				}
			for(int k=2;k<=i;k++)	//verific si scad de 2 ori un multiplu
			{	if(div[k]) sum-=2;
				div[k]=0;
			}
		}
	printf("%lld",sum);
	return 0;
}