Pagini recente » Cod sursa (job #2164714) | Cod sursa (job #2736271) | Cod sursa (job #3140450) | Cod sursa (job #116302) | Cod sursa (job #213847)
Cod sursa(job #213847)
#include <fstream>
int prime[100000];
int np;
using namespace std;
int eulerphi (int nr) {
int prod = 1;
int c = 1;
bool flg;
while ((nr > 1) && (c <= np)) {
flg = false;
while (nr%prime[c] == 0){
flg = true;
prod *= prime[c];
nr /= prime[c];
}
if (flg) { prod /= prime[c]; prod *= prime[c] - 1; }
c++;
}
return prod;
}
bool eprim(int i){
for (int j = 2; j*j<=i; j++){
if (i%j == 0){
return false;
}
}
return true;
}
void genprimes(){
int i;
np = 12;
prime[1] = 2; prime[2] = 3; prime[3] = 5;
prime[4] = 7; prime[5] = 11; prime[6] = 13;
prime[7] = 17; prime[8] = 19; prime[9] = 23;
prime[10] = 29; prime[11] = 31; prime[12] = 33;
for (i = 34; i <= 1000000; i++){
for (int j = 1; j <= 12; j++) if (i%prime[j] == 0) break;
if (eprim(i)){
np++;
prime[np] = i;
}
}
}
int main(){
int n;
long long nr;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
fin >> n;
genprimes();
nr = -1;
for (int i = 1; i <= n; i++) nr += 2*eulerphi(i);
fout << nr;
fin.close();
fout.close();
return 0x0;
}