Pagini recente » Cod sursa (job #2419693) | Cod sursa (job #88183) | Cod sursa (job #1851393) | Cod sursa (job #919038) | Cod sursa (job #427700)
Cod sursa(job #427700)
#include <fstream>
using namespace std;
ifstream in("fractii.in");
ofstream out("fractii.out");
int n,s,i,prime[100010],p,j;
bool ciur[100010];
int pow(int n, int k)
{
int ret;
if(k==0)
return 1;
else if(k%2==0)
{
ret = pow(n,k/2);
return ret*ret;
}
ret = pow(n,(k-1)/2);
return n*ret*ret;
}
int phi(int k)
{
if(k==1)
return 1;
int ret=1,div, nr;
for(div=1; div<=p && prime[div]<=k; div++)
{
nr = 0;
while(k%prime[div] == 0)
{nr++;k/=prime[div];}
if(nr)
ret*=(prime[div]-1)*pow(prime[div],nr-1);
}
return ret;
}
int main()
{
in>>n;
for(i=2; i<=n; i++)
if(!ciur[i])
{
prime[++p] = i;
for(j=2*i; j<=n; j+=i)
ciur[j] = 1;
}
for(i=1; i<=n; i++)
s+=2*phi(i);
out<<s-1;
return 0;
}