Pagini recente » Cod sursa (job #3031213) | Cod sursa (job #2902155) | Cod sursa (job #288607) | Cod sursa (job #2579510) | Cod sursa (job #68205)
Cod sursa(job #68205)
#include<fstream.h>
#include<math.h>
long long a[1000],N,p[10000];
void prim(){
for (long i=2;i<50;i++)
if (a[i]==0)
for (long j=2*i;j<100-i;j+=i)
a[j]=1;
}
long long numar(long nr) {
//if (prime[nr] == 0) //
return nr - 1;
int cnt=0;
while((nr & 1) == 0){
nr >>= 1; cnt++; }
if (cnt)
return (1 << (cnt -1) ) * p[nr];
for (long d = 3; d <= nr / d; d +=2) {
int cnt = 0;
while (nr % d == 0) {
nr /= d; cnt++; }
if (cnt) return (long long)pow((long double)d, (cnt - 1)) * (d - 1)* p[nr]; }
return nr - 1; }
long long suma() {
long long s = 0 ;
p[1] = 1;
for (long i = 2; i <= N; i++) {
if (a[i] == 0)
p[i] = i-1;
else {
p[i] = numar(i) ;
} s += p[i];
} return 1 + (s << 1);
}
int main(){
ifstream fin("fractii.in");
ofstream fout("fractii.out");
prim();
fin>>N;
fout<<suma();
fout<<"\n";
fin.close();
fout.close();
return 0;
}