Pagini recente » Cod sursa (job #1312105) | Cod sursa (job #1888724) | Cod sursa (job #2965340) | Cod sursa (job #1070300) | Cod sursa (job #2005523)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <queue>
#include <stack>
#include <vector>
#define ll long long
#define ull unsigned long long
#define pb push_back
using namespace std;
ifstream in("fractii.in");
ofstream out("fractii.out");
const int NMax = 1e5 + 5;
const int inf = 1e9 + 5;
int N;
int prime[NMax],phi[NMax];
bool notPrime[NMax];
int main() {
in>>N;
for (int i=4;i <= N;i += 2) {
notPrime[i] = true;
prime[i] = 2;
}
for (int i=3;i <= N;i += 2) {
if (notPrime[i]) {
continue;
}
for (int j=3*i;j <= N;j += 2*i) {
notPrime[j] = true;
prime[j] = i;
}
}
ll ans = 0;
for (int i=2;i <= N;++i) {
if (!notPrime[i]) {
phi[i] = i-1;
ans += phi[i];
}
else {
int pw = 1,p = prime[i],aux = i;
while (aux % p == 0) {
aux /= p;
pw *= p;
}
if (pw == i) {
phi[i] = i * (p-1) / p;
}
else {
phi[i] = phi[pw] * phi[i/pw];
}
ans += phi[i];
}
}
/*
for (int i=1;i <= N;++i) {
out<<i<<' '<<notPrime[i]<<' '<<notPrime[i]<<'\n';
}
//*/
/*
for (int i=1;i <= N;++i) {
out<<i<<' '<<phi[i]<<'\n';
}
//*/
out<<ans*2 + 1<<'\n';
in.close();out.close();
return 0;
}