Pagini recente » Cod sursa (job #1445050) | Cod sursa (job #367128) | Cod sursa (job #1458891) | Cod sursa (job #275389) | Cod sursa (job #494216)
Cod sursa(job #494216)
#include <fstream>
#define NMAX 1000002
using namespace std;
bool A[NMAX+2];
int P[NMAX];
int k;
int N;
int T[NMAX+2];
void ciur()
{
for(int i=4;i<=N+1;i+=2)
{
A[i]=true;
}
P[++k]=2;
for(int i=3;i<=N+1;i+=2)
{
if(!A[i])
{
T[i]=i-1;
P[++k]=i;
if(i<=1000)
for(int j=i*i;j<=N+1;j+=2*i)
A[j]=true;
}
}
}
void citire()
{
fstream fin("fractii.in",ios::in);
fin>>N;
fin.close();
}
int cmmdc(int a,int b)
{
int r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;
}
void totient()
{
T[1]=1;
T[2]=1;
int j;
int d;
for(int i=4;i<=N;i++)
{
if(T[i]==0)
{
j=1;
while(i%P[j]!=0)
{
j++;
}
d=cmmdc(i/P[j],P[j]);
T[i]=T[i/P[j]]*T[P[j]]*d/T[d];
}
}
}
void afisare()
{
fstream fout("fractii.out",ios::out);
long long S=0;
for(int i=2;i<=N;i++)
S+=T[i];
S*=2;
S+=1;
fout<<S<<"\n\n";
// for(int i=1;i<=N;i++)
// fout<<T[i]<<"\n";
fout.close();
}
int main(int argc,char*argv[])
{
citire();
ciur();
totient();
afisare();
}