Pagini recente » Cod sursa (job #2874562) | Cod sursa (job #1917031) | Cod sursa (job #2600100) | Cod sursa (job #104070) | Cod sursa (job #3168918)
// https://www.infoarena.ro/problema/fractii
// Fractii
// Gigel, intr-o zi cand isi facea temele la matematica, s-a apucat sa scrie pe o foaie de hartie,
// un sir de fractii ireductibile de forma P/Q cu 1 ≤ P,Q ≤ N, unde N este un numar natural ales de el.
// De exemplu, pentru N = 4 el a obtinut urmatorul sir:
// 1/1 1/2 1/3 1/4 2/1 2/3 3/1 3/2 3/4 4/1 4/3
// Gigel s-a apucat apoi sa numere cate fractii a obtinut pentru N = 4 si a vazut ca sunt 11.
// Cerinta
// Fiind dat un numar natural N, sa se determine cate fractii sunt in sirul de fractii construit dupa regulile de mai sus.
// Date de intrare
// Fisierul de intrare fractii.in contine pe prima linie numarul natural N.
// Date de iesire
// Fisierul de iesire fractii.out trebuie sa contina un numar natural pe prima linie care reprezinta cate fractii sunt in sir.
// Restrictii si precizari
// 1 ≤ N ≤ 1.000.000
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
const int MAX_LENGTH = 1000001;
int n;
// START - solution 1
// int cmmdc(int a, int b)
// {
// while (b != 0)
// {
// int temp = b;
// b = a % b;
// a = temp;
// }
// return a;
// }
// int fractii_ireductibile(int x)
// {
// int count = 0;
// for (int i = 1; i <= x; i++)
// {
// for (int j = 1; j <= x; j++)
// {
// if (cmmdc(i, j) == 1)
// {
// count++;
// }
// }
// }
// return count;
// }
// END - solution 1
// START - solution 2
int phi(int n)
{
int count = 0;
int phi[MAX_LENGTH];
for (int i = 1; i <= n; i++)
phi[i] = i;
for (int i = 2; i <= n; i++)
{
if (phi[i] == i)
{
for (int j = i; j <= n; j += i)
{
phi[j] = phi[j] / i * (i - 1);
}
}
count = count + phi[i];
}
// for (int i = 1; i <= n; i++)
// {
// cout << phi[i] << " ";
// }
// cout << endl;
return count;
}
// END - solution 2
int main()
{
fin >> n;
fin.close();
if (n < 1 || n > 1000000)
{
return 0;
}
// START - write solution 1
// fout << fractii_ireductibile(n) << endl;
// END - write solution 1
// START - write solution 2
fout << phi(n) * 2 + 1 << endl;
// END - write solution 2
fout.close();
return 0;
}