Pagini recente » Cod sursa (job #1631185) | Cod sursa (job #2171141) | Cod sursa (job #2882791) | Cod sursa (job #2780533) | Cod sursa (job #67041)
Cod sursa(job #67041)
#include <stdio.h>
#include <string.h>
int prime[78498];
int nrPrime = 0;
int citeste() {
FILE *fin = fopen("fractii.in", "r");
int n;
fscanf(fin, "%d", &n);
fclose(fin);
return n;
}
void genPrime(int n) {
char p[1000001];
memset(p, 1, sizeof(char) * 1000001);
p[1] = 0;
// printf("{2");
int i = 2;
for (; i <= n; ++i)
if (p[i]) {
// printf(", %d", i);
prime[nrPrime] = i;
++nrPrime;
int j = i * 2;
while (j <= n) {
p[j] = 0;
j += i;
}
}
// printf("}\n");
// printf("Total: %d numere prime\n", nrPrime);
}
int phi(int n) {
double rez = n;
// printf("Calculeaz phi(%d)...\n", n);
int i = 0;
while ((i < nrPrime) && (prime[i] <= n)) {
// printf("Verific daca este divizibil cu %d\n", prime[i]);
if (n % prime[i] == 0) {
rez *= (double)(prime[i] - 1) / (double)prime[i];
// printf("%g\n", (double)(prime[i] - 1) / (double)prime[i]);
}
++i;
}
return rez;
}
void scrie(int rez) {
FILE *fout = fopen("fractii.out", "w");
fprintf(fout, "%d\n", rez);
fclose(fout);
}
int main(int argc, char *argv[]) {
int n = citeste();
genPrime(n);
int i = 2;
int rez = 1;
for (; i <= n; ++i) {
rez += phi(i) * 2;
// printf("Phi(%d) = %d\n", i, phi(i));
}
scrie(rez);
return 0;
}