Pagini recente » Cod sursa (job #968902) | Cod sursa (job #177982) | Cod sursa (job #2973308) | Cod sursa (job #992908) | Cod sursa (job #1875270)
#include <fstream>
using namespace std;
ifstream in ("fractii.in");
ofstream out ("fractii.out");
bool v[1000001];
int p[10000];
int main()
{
int n,i,j,nr=0,ci;
long double fr;
unsigned long long ans=1;
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;
}