Pagini recente » Cod sursa (job #849164) | Cod sursa (job #52526) | Cod sursa (job #3233831) | Cod sursa (job #1086408) | Cod sursa (job #533434)
Cod sursa(job #533434)
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
int cmmdc(int a,int b)
{
while(b)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
FILE *in,*out;
int N,cntprim,i,j,nr,contscad;
double euler;
int main()
{
in=fopen("fractii.in","rt");
out=fopen("fractii.out","wt");
fscanf(in,"%d",&N);
vector<bool> primviz(N+1);
vector<double> totprim(N+1);
vector<double> scadere(N+1);
euler=1;
for(i=2;i<=N;i++)
{
if(!primviz[i])
{
euler+=2*(i-1);
for(j=i<<1;j<=N;j+=i)
{
primviz[j]=true;
if(scadere[j]>1)
nr=j/scadere[j];
else
{
nr=j;
scadere[j]=1;
}
contscad=0;
if(!totprim[j])
totprim[j]=j;
while( !(nr%i) && nr>1 )
{
nr/=i;
contscad++;
}
if(nr<=1)
{
euler+=2*(totprim[j]-totprim[j]/i);
totprim[j]=0;
}
else
{
totprim[j]=totprim[j]-totprim[j]/i;
scadere[j]*=pow(i,contscad);
}
}
}
}
fprintf(out,"%.0lf",euler);
return 0;
}