Pagini recente » Cod sursa (job #3272551) | Cod sursa (job #535352) | Cod sursa (job #1499280) | Cod sursa (job #1678291) | Cod sursa (job #308341)
Cod sursa(job #308341)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
int main()
{
int n,i,j,s;
vector<int> x(1000001,0);
f>>n;
for (i=2;i<=n;i++)
x[i]=i; // x[i] = numarul de numere <i prime cu i
// folosim formula indicatorului lui Euler phi(n)=numarul de numere prime <n si prime cu n
// daca n=p1^i1 * p2^i2 * ... *pk^ik cu p1, p2, ..., pk numere prime
// atunci phi(n) = n* (1-1/p1)*(1-1/p2)*...*(1-1/pk)
s=0;
for (i=2;i<=n;i++)
{
if (x[i]==i) // i este numar prim
{
x[i]--;
for (j=i+i;j<=n;j=j+i)
x[j]=x[j]/i*(i-1);
}
s=s+x[i];
}
s=s*2+1; // o fractie apare de 2 ori i/j dar si j/i
// si se adauga fractia 1/1
g<<s;
f.close();
g.close();
return 0;
}