Pagini recente » Cod sursa (job #2397419) | Cod sursa (job #867131) | Cod sursa (job #1687381) | Cod sursa (job #388301) | Cod sursa (job #24555)
Cod sursa(job #24555)
#include<stdio.h>
#include<math.h>
#include<string.h>
#define MAXSIZE 1000001
int n,nr;
int citire()
{
FILE *f=fopen("fractii.in","r");
fscanf(f,"%d",&n);
fclose(f);
return 1;
}
int p[MAXSIZE], prim[MAXSIZE];
float p2[MAXSIZE];
int tryit(int m)
{
int j=0;
while(pow(m,j+1)<n) j++;
return j*(-1);
}
int wtf2(int m)
{
int i,j,d=0,b;
for(i=m+1;i<=n;i++)
if(i%m!=0)
{b=1;
for(j=2;j<=m;j++)
if(p[j]==1&&i%j==0) {b=0; break;}
if(b) d++;
}
return d;
}
int tot(int m)
{
if(m==1) {p2[m]=n; return 1;}
int i,j,d=1;
memset(p,0,m*8);
for(i=2;i<=n;i++)
if(p[i]==0&&m%i==0)
{p[i]=1; for(j=i*i; j<=m; j+=i) p[j]=2; d++;}
if(d==1)
{
prim[m]=1;
p2[m]=n-1+tryit(m);
for(j=m*m;j<=n;j*=m)
p2[j]=p2[m];
}
else
{p2[m]=m;
for(i=2;i<=m;i++)
if(p[i]==1)
{
p2[m]=(float)p2[m]*(1-(float)1/i);
}
p2[m]+=wtf2(m);
}
return 1;
}
int main(void)
{
int i;
FILE *f;
citire();
for(i=1;i<=n;i++)
{if(p2[i]==0) tot(i);
nr+=p2[i];
}
f=fopen("fractii.out","w");
fprintf(f,"%d\n",nr);
fclose(f);
return 0;
}