Cod sursa(job #68205)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 26 iunie 2007 22:54:57
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#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;
}