Pagini recente » Cod sursa (job #844600) | Cod sursa (job #2216723) | Cod sursa (job #3184386) | Cod sursa (job #2856324) | Cod sursa (job #88300)
Cod sursa(job #88300)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;
const int N = 1000000;
vector<int> prime;
int d[N+1];
int ciur() {
const int MX = 1000000;
bool* pr = (bool*) malloc(sizeof(bool)*(MX+1)); memset(pr,true,sizeof(bool)*(MX-1));
pr[0] = pr[1] = false;
for (int i = 2; i <= MX; ++i) {
if (pr[i]) {
for (int j = 2; i*j <= MX; ++j) pr[i*j] = false;
prime.push_back(i);
}
}
return prime.size();
}
int phi ( int a ) {
int r = a;
for (int i = 0; prime[i] <= a && i < prime.size(); ++i)
if (a % prime[i] == 0) {
r /= prime[i];
r *= prime[i]-1;
}
return r;
}
int main() {
freopen("fractii.in","rt",stdin);
freopen("fractii.out","wt",stdout);
int n = 0;
scanf("%d",&n);
ciur();
d[1] = 1;
for (int i = 2; i <= n; ++i) d[i] = d[i-1] + 2*phi(i);
printf("%d\n",d[n]);
return 0;
}