Pagini recente » Cod sursa (job #458547) | Cod sursa (job #318627) | Cod sursa (job #3036568) | Cod sursa (job #870631) | Cod sursa (job #308533)
Cod sursa(job #308533)
#include <fstream>
#include <cmath>
#define MAXN 1000001
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
long long fractii;
long n,phi[MAXN];
void genereaza_phi () // generam printr-o tehnica gen ciurul lui Eratostene
{ int i,j;
for (i=2; i<=n; i++) // phi[i] reprezinta .... phi(i),d'oh!
phi[i]=i;
for (i=2; i<=n; i++)
if (phi[i]==i) // daca e adevarat inseamna ca e prim din moment ce e generat cu ciurul lui ....
{ phi[i]--; // daca e prim formula e phi(i)=i-1;
for (j=2*i; j<=n; j+=i) // impartim multiplii de i cu i (o singura data pentru fiecare) pentru a obtine i^(exp-1) pentru
phi[j]=phi[j]/i*(i-1); // fiecare multiplu si inmultim cu (i-1) (tot dupa formula) acest lucru fiind necesar doar odata
}
}
int main ()
{ f>>n;
genereaza_phi ();
for (int i=2; i<=n; i++)
fractii+=phi[i];
fractii=(fractii<<1)+1;
g<<fractii;
f.close (); g.close ();
return 0;
}