Pagini recente » Cod sursa (job #1811408) | Cod sursa (job #1365430) | Cod sursa (job #2735016) | Cod sursa (job #1836525) | Cod sursa (job #1427033)
//#define CONSOLE_MODE 1
#if CONSOLE_MODE
#include <iostream>
#else
#include <fstream>
#endif
#include <vector>
using namespace std;
struct FR
{
int sus, jos;
};
int euler(int n, vector<int> &div)
{
FR rezultat;
rezultat.sus = 1; rezultat.jos = 1;
for (int i = 0; i < div.size(); i++)
{
if (n % div[i] == 0)
{
rezultat.sus *= div[i] - 1;
rezultat.jos *= div[i];
//rezultat = rezultat * (Fractie(div[i], div[i]) - Fractie(1, div[i]));
}
}
rezultat.sus = rezultat.sus * n;
#if CONSOLE_MODE
cout << "n: " << n << "rezultat: " << rezultat.sus / rezultat.jos << endl;
#endif
return rezultat.sus / rezultat.jos;
}
int rezolva(int n)
{
bool *ciur;
ciur = new bool[n+1];
vector<int> nrPrime;
int total = 0;
for (int i = 0; i < n; i++)
ciur[i] = true;
for (int i = 1; i <= n; i++)
{
if (ciur[i] && i != 1)
nrPrime.push_back(i);
total += euler(i, nrPrime);
int mult = 2;
while (mult * i <= n && i > 1)
{
ciur[i * mult] = false;
mult++;
}
}
delete[] ciur;
return total * 2 - 1;
}
int main()
{
int n;
#if CONSOLE_MODE
std::cin >> n;
#else
ifstream IN("fractii.in");
IN >> n;
IN.close();
#endif
#if CONSOLE_MODE
cout << rezolva(n) << endl;
system("pause");
#else
ofstream OUT("fractii.out");
OUT << rezolva(n) << endl;
OUT.close();
#endif
return 0;
}