Pagini recente » Cod sursa (job #1020365) | Cod sursa (job #2537920) | Cod sursa (job #879236) | Cod sursa (job #1537478) | Cod sursa (job #420784)
Cod sursa(job #420784)
#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;
}