Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/airinei17 | Diferente pentru concurs-mihai-patrascu-2013 intre reviziile 12 si 13 | Cod sursa (job #712846) | Cod sursa (job #514964)
Cod sursa(job #514964)
#include<fstream>
#include<cmath>
#include<vector>
#define NMAX 10003
#define NMAX2 1000003
using namespace std;
int ciur[NMAX2];
int b[NMAX], n, i;
long long a[NMAX2], pos;
void ciurf()
{
int i, j;
for (i=2; i*i<=n; ++i)
if (ciur[i]==0)
{
b[++b[0]]=i;
for (j=i+i; j<=n; j+=i)
ciur[j]=1;
}
}
long long putere(long long d, long long x)
{
long long nr=1;
while (x%d==0)
{
nr*=d;
x/=d;
}
return nr;
}
long long numar(long long x)
{
long long d, p=1, aux=x, i=1;
d=b[1];i=1;
while (p==1 && d*d<=x && i<=b[0])
if (x%d==0) p=putere(d, x);
else {i+=1;d=b[i];}
if (i>b[0] || d*d>x) {d=x;p=x;}
return p/d*(d-1)*a[aux/p];
}
int main()
{
ifstream f("fractii.in");
ofstream g("fractii.out");
f>>n;
ciurf(); a[1]=1;pos=1;
for (i=2; i<=n; ++i)
{
a[i]=numar(i);
pos+=a[i]*2;
}
g<<pos<<"\n";
f.close();
g.close();
return 0;
}