Pagini recente » Cod sursa (job #143128) | Cod sursa (job #3275738) | Cod sursa (job #1383606) | Cod sursa (job #764228) | Cod sursa (job #1875068)
#include <fstream>
using namespace std;
ifstream in ("fractii.in");
ofstream out ("fractii.out");
bool v[1000001];
int p[10000];
int main()
{
int n,i,ans=1,j,nr=0,ci;
double fr;
in>>n;
for (i=2;i<=n;i++)
if (v[i]==0)
for (j=2*i;j<=n;j+=i)
v[j]=1;
for (i=2;i<=n;i++)
{
if (v[i]==0)
{
nr++;
p[nr]=i;
}
}
for (i=2;i<=n;i++)
{
ci=i;
if (v[i]==0)
ans+=(ci-1)*2;
else
{
fr=i;
for (j=1;p[j]*p[j]<=ci;j++)
if (i%p[j]==0)
{
fr=(fr/p[j])*(p[j]-1);
while (ci%p[j]==0)
ci/=p[j];
}
if (ci>1)
fr=(fr/ci)*(ci-1);
//out<<"pentru "<<i<<" indicatorul lui Euler este "<<fr<<'\n';
ans+=fr*2;
}
}
out<<ans;
return 0;
}