Pagini recente » Cod sursa (job #576365) | Cod sursa (job #2131974) | Cod sursa (job #778691) | Cod sursa (job #478797) | Cod sursa (job #494203)
Cod sursa(job #494203)
#include <fstream>
#define NMAX 1010
using namespace std;
bool A[NMAX+2];
int P[NMAX];
int k;
int N;
int T[NMAX*NMAX+2];
void ciur()
{
for(int i=4;i<=NMAX;i+=2)
{
A[i]=true;
}
P[++k]=2;
for(int i=3;i<=NMAX;i+=2)
{
if(!A[i])
{
P[++k]=i;
for(int j=i*i;j<=NMAX;j+=2*i)
A[j]=true;
}
}
}
void citire()
{
fstream fin("fractii.in",ios::in);
fin>>N;
fin.close();
}
void totient()
{
int z;
int p;
int numitor;
for(int i=2;i<=N;i++)
{
z=i;
numitor=1;
T[i]=i;
for(int j=1;P[j]*P[j]<=N ;j++)
{
p=0;
while(z%P[j]==0)
{
z/=P[j];
p++;
}
if(p)
{
T[i]*=P[j]-1;
numitor*=P[j];
}
}
if(z>1)
{
numitor*=z;
T[i]*=z-1;
}
T[i]/=numitor;
}
}
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";
fout.close();
}
int main(int argc,char*argv[])
{
citire();
ciur();
totient();
afisare();
}