Pagini recente » Cod sursa (job #1963794) | Cod sursa (job #1025771) | Cod sursa (job #1685625) | Cod sursa (job #503565) | Cod sursa (job #83289)
Cod sursa(job #83289)
#include<cstdlib>
#include<string>
char primeFlagsAux[1000000];
long primeFlags[1000000];
long long phiFlags[1000000];
void getTheNumber(long n) {
long long i, j,nr = 1;
primeFlags[2]=1;
for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) {
if ((primeFlagsAux[i >> 3] & (1 << (i & 7))) == 0) {
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
primeFlagsAux[j >> 3] |= (1 << (j & 7));
} } }
for (i = 1; 2 * i + 1 <= n; ++i)
if ((primeFlagsAux[i >> 3] & (1 << (i & 7))) == 0)
primeFlags[2*i+1]=1;}
int main()
{
freopen("fractii.in","r",stdin);freopen("fractii.out","w",stdout);
long long n,i,j,nr;
scanf("%ld\n",&n);
getTheNumber(n);
for(i=1;i<=n;i++)phiFlags[i]=i;
for(i=2;i<=n;i++)
if(primeFlags[i])
{
phiFlags[i]=i-1;
j=2;
while(i*j<=n){
phiFlags[i*j]=(phiFlags[i*j]*(i-1))/i;j++;}
}//for(i=0;i<100;i++)printf("%d\t%d\t%d\n",i,primeFlags[i],phiFlags[i]);
for(i=1,nr=-1;i<=n;i++)
{
nr+=phiFlags[i]*2;
}
printf("%ld\n",nr);
return 0;
}