Pagini recente » Cod sursa (job #1897993) | Cod sursa (job #2693551) | Cod sursa (job #3229027) | Cod sursa (job #1597221) | Cod sursa (job #1273486)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
const char INPUT_FILENAME[]="fractii.in";
const char OUTPUT_FILENAME[]="fractii.out";
int numaraFractii(int n){
vector<bool> *nr_prime = new vector<bool>(n+1);
int nr_fractii = (n-1)*2; // pentru fiecare numar k din intervalul [2, n] exista fractiile: 1/k si k/1
nr_fractii += 1; // exista fractia 1/1
int nr_prime_gasite = 0;
int nr_multipli;
//marchez toate numerele impare ca fiind prime
for(int i = 3; i <= n; i += 2){
(*nr_prime)[i] = true;
}
//iau separat cazul numarului prim 2
nr_multipli = n/2;
// (n-1) deoarece se iau in considerare toate numerele din intervalul [2, n]
nr_fractii += ((n-1) - nr_multipli - nr_prime_gasite) * 2;
++nr_prime_gasite;
int i;
for(i = 3; i*i <= n; i += 2){
if((*nr_prime)[i] == true){
for(int j = i*i; j <= n; j += i*2){
(*nr_prime)[j] = false;
}
}
}
for(int j = 3; j <= n; j += 2){
if((*nr_prime)[i] == true){
nr_multipli = n/i;
// (n-1) deoarece se iau in considerare toate numerele din intervalul [2, n]
nr_fractii += ((n-1) - nr_multipli - nr_prime_gasite) * 2;
++nr_prime_gasite;
}
}
delete nr_prime;
return nr_fractii;
}
int main(int argc, char *argv[]){
int n;
ifstream fin(INPUT_FILENAME);
fin >> n;
fin.close();
int nr_de_fractii = numaraFractii(n);
ofstream fout(OUTPUT_FILENAME);
fout << nr_de_fractii;
fout.close();
return 0;
}