Cod sursa(job #420784)

Utilizator samuel91Asofronie Samuel samuel91 Data 20 martie 2010 15:58:09
Problema Fractii Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#define nmax 1000000
#include<math.h>
using namespace std;
unsigned long long  n,a[nmax],b[nmax];
unsigned long long nr;
void rezolvare()
{
	ofstream g("fractii.out");
unsigned long long k=1,i;
for(i=2;i<=n;i++)
{
if(b[k]==i)
	{nr+=b[k]-1; k++;}
else
{
unsigned long long l=1,ok;
unsigned long long p,in;
in=i;
p=in;
while(in!=1)
{
if(in%b[l]==0)
{
ok=1;
while(in%b[l]==0)
in/=b[l];
}
if(ok)
p=(p-(p/b[l]));
l++;
ok=0;
}
nr+=p;
}
}
g<<nr*2+1;
	g.close();
}

void prime()
{
	
unsigned long long i,k=0,j;
double nk;
	for(i=3;i<=n;i+=2)
		a[++k]=i; nk=k; 
	i=1; k=1; b[1]=2;
	while(i<sqrt(nk))
	{
		while(!a[i]&&i<=n)
			i++;
		if(a[i])
	{b[++k]=a[i];
	j=i+a[i];
	while(j<=nk)
		{a[j]=0; j+=a[i];}}
	a[i]=0;
	i++;
	}
	while(i<=nk)
	{
		if(a[i])
			b[++k]=a[i];
	i++;
	}
	
}
void citire()
{
	ifstream f("fractii.in");
f>>n;
prime();
rezolvare();
f.close();

}

	int main()
{ 
citire();
return 0;
}