Pagini recente » Cod sursa (job #2768269) | Cod sursa (job #2555478) | Cod sursa (job #701826) | Cod sursa (job #2824592) | Cod sursa (job #1317684)
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
int n;
bool p[1000001];
void initiate_p(){
for(int i=1;i<=n;i++) p[i]=true;
}
void primeSieve(){
initiate_p();
for(int i=2;i<=sqrt(n);i++)
if(p[i]==true) for(int j=i;i*j<=n;j++) p[i*j]=false;
}
long long totient(){
long long s=1;
for(int i=2;i<=n;i++){
if(p[i]==true) s=s+(i-1)*2;
else{
double prod=i;
for(int j=2;j<=i/2;j++)
if(p[j]==true && i%j==0)
prod=prod*(double)(1-(double)((double)1/(double)j));
s=s+(long)prod*2;
}
}
return s;
}
int main(){
ifstream in; ofstream out;
in.open("fractii.in"); out.open("fractii.out");
out.clear();
in>>n;
primeSieve();
out<<totient();
return 0;
}