Cod sursa(job #420542)
#include<fstream>
#define nmax 1000000
using namespace std;
unsigned long n,a[nmax],b[nmax];
unsigned long long nr;
void rezolvare()
{
ofstream g("fractii.out");
unsigned long k=1,i;
for(i=2;i<=n;i++)
{
if(b[k]==i)
{nr+=b[k]-1; k++;}
else
{
unsigned long l=1,ok,in;
float p;
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*=(1.00-(1.00/float(b[l])));
l++;
ok=0;
}
nr+=p;
}
}
g<<nr*2+1;
g.close();
}
void prime()
{
unsigned long i,k=0,j;
for(i=1;i<=n;i++)
a[i]=i;
i=2;
while(i<=n)
{
while(!a[i]&&i<=n)
i++;
if(a[i])
{b[++k]=a[i]; a[i]=0;
j=i*i;
while(j<=n)
{a[j]=0; j+=i;}}
i++;
}
}
void citire()
{
ifstream f("fractii.in");
f>>n;
prime();
rezolvare();
f.close();
}
int main()
{
citire();
return 0;
}