Nu aveti permisiuni pentru a descarca fisierul grader_test9.in
Cod sursa(job #1222840)
Utilizator | Data | 24 august 2014 15:35:59 | |
---|---|---|---|
Problema | Fractii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.19 kb |
#include <stdio.h>
#include <string.h>
#include <iostream>
#define MAX 1000005
using namespace std;
int n,phi[MAX],ciur[MAX],exp[MAX][2],put[25];
long long sol;
int main()
{
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
scanf("%d",&n);
for (int i=2;i<=n;++i)
{
if (ciur[i]==0)
{
int j;
if (1LL*i*i<=n)
{
j=i*i; while (j<=n) ciur[j]=1,j+=i;
}
}
}
for (int i=1;i<=n;++i) phi[i]=1;
for (int i=2;i<=n;++i)
{
if (ciur[i]==0)
{
phi[i]=i-1;
exp[i][1]=1; exp[i][0]=i;
put[0]=1; int j=1; while ((put[j-1]*i)<=n) put[j]=put[j-1]*i,++j;
j=2;
int r=2*i;
while (r<=n)
{
int v=0; if (exp[j][0]==i) v=exp[j][1];
phi[r]*=put[v]*(i-1);
exp[r][1]=v+1;
exp[r][0]=i;
++j;
r+=i;
}
}
}
for (int i=2;i<=n;++i) sol=sol+(1LL*phi[i]*2);
sol++;
cout<<sol;
fclose(stdin);
return 0;
}