Pagini recente » Cod sursa (job #2040272) | Cod sursa (job #161546) | Cod sursa (job #398518) | Cod sursa (job #994945) | Cod sursa (job #481164)
Cod sursa(job #481164)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int power(int x, int pow)
{
if(pow==0) return 1;
int rez=x;
while(pow>1)
{
rez*=x;
pow--;
}
return rez;
}
int prime(int n, char* &a, int* &b)
{
int nr=1;
long long int i,j;
a = (char *)calloc(n/2+2,sizeof(char));
for(i=3;i<=n;i+=2)
{
if(a[(i+1)/2] == 0)
{
nr++;
for(j=i*i; j<=n; j+=(i<<1))
a[(j+1)/2] = 1;
}
}
b = (int *)calloc(nr, sizeof(int));
b[0] = 2;
j=1;
for(i=3;i<=n;i+=2)
if(a[(i+1)/2]==0) b[j++] = i;
return nr;
}
int fi(int x, int b[])//x -valoarea, b - array cu nr prime
{
//descompune in factori primi
int a[10][2], n=0, i=0, j, rez=1, last =-1;
while(x>1)
{
if(x%b[i] == 0)
{
//for(j=0;j<n;j++) if(a[j][0] == b[i]) break;
//if(n>0 && a[n-1][0] == b[i])
if(i==last) a[n-1][1]++;
else
{
a[n][0] = b[i];
a[n][1] = 1;
n++;
last = i;
}
//if(j>=n) { a[j][0] = b[i]; a[j][1] = 1; n++;}
//else a[j][1]++;
x /= b[i];
}
else i++;
}
for(i=0; i<n; i++)
rez *= (a[i][0]-1)*power(a[i][0],a[i][1]-1);
return rez;
}
int main()
{
long int n, n2;
int *b;
char *a;
freopen("fractii.in", "r", stdin);
//freopen("fractii.out", "w", stdout);
scanf("%d", &n);
n = 1000000;
n2 = prime(n, a, b);
//printf("%d",n2);
int i;
long long int rez=1; //for prime number 2
//printf("sof= %d",sizeof(a));
for(i=3;i<=n;i++)
if(i%2==1 && !a[(i+1)/2]) rez += i-1;
else rez+=fi(i,b);
printf("%lld",rez*2+1);
return 0;
}