Pagini recente » Monitorul de evaluare | Cod sursa (job #2224468) | sdaf | Rating Andrei Muresanie (andreim99) | Cod sursa (job #2007659)
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ifstream in("fractii.in");
ofstream out("fractii.out");
const int NMax = 1e6 + 5;
int N;
bool notPrime[NMax];
int phi[NMax];
int main() {
in>>N;
for (int i=2;i <= N;++i) {
phi[i] = i;
}
ll ans = 0;
for (int j=2;j <= N;j += 2) {
notPrime[j] = true;
phi[j] -= phi[j]/2;
}
for (int i=3;i <= N;i += 2) {
//ans += phi[i];
if (notPrime[i]) {
continue;
}
for (int j=i;j <= N;j += i) {
notPrime[j] = true;
phi[j] -= phi[j]/i;
}
}
for (int i=2;i <= N;++i) {
ans += phi[i];
//cout<<phi[i]<<'\n';
}
out<<ans*2 + 1<<'\n';
in.close();out.close();
return 0;
}