Cod sursa(job #2114308)

Utilizator denischiritachirita denis denischirita Data 25 ianuarie 2018 15:51:42
Problema Fractii Scor 100
Compilator cpp Status done
Runda ichb_10 Marime 0.9 kb
#include <cstdio>
#include <cmath>
using namespace std;
int nr,p[100000];
bool c[1000010];
void ciur(int n){
int lim=(int)sqrt(double(n)),i,j;
c[0]=c[1]=1;
for(i=4;i<=n;i=i+2)
    c[i]=1;
    for(i=3;i<=lim;i=i+2){
        for(j=i*i;j<=n;j=j+2*i)
        c[j]=1;
    }
}
int phi(int n){
int i=1,prod=n;
if(c[n]==0)
    return n-1;
else{
while(p[i]<=n&&n!=1){
        if(c[n]==0){
        prod=prod/n*(n-1);
        break;
        }
    if(n%p[i]==0){
        prod=prod/p[i]*(p[i]-1);
    while(n%p[i]==0)
        n=n/p[i];
    }
        ++i;
}
        return prod;
}
}
int main()
{
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    int n,i;
    long long s=0;
    scanf("%d",&n);
    ciur(1000000);
    for(i=1;i<=1000000;++i){
        if(c[i]==0)
            p[++nr]=i;
}
for(i=1;i<=n;++i)
    s=s+phi(i);
    s=2*s-1;
    printf("%lld",s);
}