Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/roman_59 | Profil ordogfioka | Cod sursa (job #1708899) | Cod sursa (job #1194879)
#include <iostream>
#include <fstream>
using namespace std;
int primes[1000001];
bool isPrime(int n)
{
for (int i = 2; i*i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int calculatePrimes(int n)
{
int primeCount = 0;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
primes[primeCount++] = i;
}
}
return primeCount;
}
int phi(int n, int primeCount)
{
int value = n;
for (int i = 0; primes[i] <= n && i < primeCount; i++) {
if (n % primes[i] == 0) {
value = value * (primes[i] - 1) / primes[i];
}
}
return value;
}
int main()
{
ifstream input("fractii.in");
ofstream output("fractii.out");
int n = 0;
while (input >> n) {
int primeCount = calculatePrimes(n);
int sum = 0;
for (int i = 2; i <= n; i++) {
sum += phi(i, primeCount);
}
output << sum * 2 + 1 << endl;
}
return 0;
}