Pagini recente » Cod sursa (job #63120) | Cod sursa (job #2879797) | Cod sursa (job #1548270) | Cod sursa (job #476022) | Cod sursa (job #533206)
Cod sursa(job #533206)
#include<stdio.h>
#include<vector>
int cmmdc(int a,int b)
{
while(b)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
using namespace std;
FILE *in,*out;
int N,cntprim,i,j,nr,prim[50000],poz;
double euler;
bool primviz[1000001]; //cele cu false sunt prime
int main()
{
in=fopen("fractii.in","rt");
out=fopen("fractii.out","wt");
fscanf(in,"%d",&N);
euler=1;
prim[1]=2;
cntprim=1;
for(i=3;i<=N;i+=2)
{
if(!primviz[i])
{
for(j=i<<1;j<=N;j+=i)
primviz[j]=true;
prim[++cntprim]=i;
}
}
for(i=2;i<=N;i++)
{
nr=i;
poz=1;
double prod=i;
while(nr>1)
{
bool putere=false;
if( !(nr%prim[poz]) )
{
putere=true;
int cat=nr/prim[poz];
nr-=cat*prim[poz];
}
if(putere)
prod*=(1-(double)1/prim[poz]);
poz++;
}
euler+=2*prod;
}
fprintf(out,"%.0lf",euler);
return 0;
}