Cod sursa(job #2198784)
| Utilizator | Data | 25 aprilie 2018 14:20:29 | |
|---|---|---|---|
| Problema | Fractii | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.24 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
short int ciur[1000001];
int n;
long long int fractii = 1;
int p = 1, phi = 1, d = 2;
int main()
{
f >> n;
//2 = numar neprim
//1 = numar prim
ciur[1] = 2;
ciur[2] = 1;
for(int i = 3 ; i <= n ; i += 2)
{
if(ciur[i] == 0)
{
ciur[i] = 1;
}
else{
for(int j = i+i ; j <= n ; j += i)
{
ciur[j] = 2;
}
}
}
for(int i = 2 ; i <= n ; i++)
{
d = 2;
int ci = i;
if(ciur[i] == 1)
{
fractii += 2*(i-1);
}
else{
while(ci / d >= 1){
if(ci % d == 0){
while(ci % d == 0){
ci /= d;
p *= d;
}
p /= d;
phi *= (d-1)*p;
p = 1;
}
if(d == 2) d++;
else d+= 2;
}
fractii += 2*phi;
phi = 1;
}
}
g << fractii;
return 0;
}
