Cod sursa(job #206519)

Utilizator IrnukIrina Grosu Irnuk Data 7 septembrie 2008 14:53:27
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
/*fractii*/

#include<fstream.h>
#include<string.h>
#include<math.h>


long n,div[50];
char s[1000005],s1[1000005];
unsigned long contor,cont;

ifstream fin("fractii.in");
ofstream fout("fractii.out");

int prim(long x)
{
	long d;
	double rad=sqrt(x);
	for(d=2;d<=rad;d++)
		if(x%d==0)
			return 0;
	return 1;
}

void diviz(long x)
{
	long d,sv=x;
	for(d=2;d<=sv/2&& x!=0;d++)
		if(prim(d)==1)
		{
			if(x%d==0)
			{
				div[++div[0]]=d;
				while(x%d==0)
					x/=d;
			}
		}
	if(div[0]==0)
		div[++div[0]]=x;
}

int main()
{
	long i,j,d;
	fin>>n;

	contor=n;
	for(i=0;i<=n+1;i++)
		s1[i]=' ';
	for(i=2;i<=n;i++)
	{
	
		cont=0;
		strcpy(s,s1);
		for(j=1;j<=div[0];j++)
		div[j]=0;
		div[0]=0;
		diviz(i);
		for(j=1;j<=div[0];j++)
		{
			d=1;
			while(d*div[j]<=n)
			{
				if(s[d*div[j]]==' ')
				{
					s[d*div[j]]='0';
					cont++;
				}
				d++;
			}
		}
		contor=contor+n-cont;

		
	}

	fout<<contor<<'\n';
	fout.close();
	return 0;
}