Cod sursa(job #3329616)
| Utilizator | Data | 14 decembrie 2025 16:23:09 | |
|---|---|---|---|
| Problema | Fractii | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.12 kb |
#include <iostream>
using namespace std;
FILE *in = fopen("fractii.in", "r"), *out = fopen("fractii.out", "w");
int n, prim[1000005];
long long res = 1;
int main()
{
fscanf(in, "%d", &n);
for(int i = 1; i <= n; ++i)
prim[i] = 1;
int rem, phi_i;
for(int i = 2; i <= n; ++i){
for(int j = 2*i; j <= n; j += i)
prim[j] = 0;
if(prim[i])
phi_i = i - 1;
else {
phi_i = i;
rem = i;
for(int pi = 2; pi <= rem; ++pi)
if(prim[pi] && i % pi == 0){
phi_i = phi_i * (pi - 1) / pi;
while (rem % pi == 0){
rem /= pi;
if (prim[rem]){
if(rem != pi){
phi_i = phi_i * (rem - 1) / rem;
rem = 1;
}
break;
}
}
}
}
res += 2 * phi_i;
}
fprintf(out, "%lld", res);
return 0;
}
