Cod sursa(job #1387627)

Utilizator vlad_andrei.ursuUrsu Vlad-Andrei vlad_andrei.ursu Data 14 martie 2015 15:28:13
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <iostream>
#include <climits>
#include <cmath>
#include <fstream>
#define MAX SHRT_MAX
using namespace std;

void init(int auxiliary[MAX], int n){

    for (int i = 2; i <= n; i++){
        auxiliary[i] = 1;
    }
}

int prime_numbers(int n, int prime[MAX], int auxiliary[MAX]){
    int index = 0;
    int limit = sqrt(n);

    for (int i = 2; i <= n; i++){
        if (auxiliary[i] == 1){
            if (i * i >= n){
                prime[index++] = i;
                continue;
            }
            prime[index++] = i;
            for (int j = i*i; j <= n; j = j + i){
                auxiliary[j] = 0;
            }
        }
    }

    return index;
}


int number_of_fractions(int n, int prime[MAX], int number_primes){
    int contor = 0;
    int part_contor = 0;
    int index_prime;

    for (int i = 2; i <= n; i++){
        part_contor = i;
        index_prime = 0;
        while (prime[index_prime] <= i && index_prime < number_primes){
            if (i % prime[index_prime] == 0){
                cout << "\n" <<  "i = " << i << " prime[ind]= " << prime[index_prime]<< "\n";
                part_contor *= (prime[index_prime]-1);
                part_contor /= prime[index_prime];
            }
           index_prime++;
        }
        cout  << part_contor << "\n";
        contor += part_contor;
    }

    return (contor * 2 + 1);

}

int main(void){

    int auxiliary[MAX];
    int prime[MAX];
    int number_primes = 0;
    int result = 0;
    int n;

    ifstream in;
    ofstream out;

    in.open("fractii.in");
    out.open("fractii.out");

    in >> n;

    init(auxiliary, n);
    number_primes = prime_numbers(n, prime, auxiliary);

    for (int i = 0; i < number_primes; i++)
        cout << prime[i] << " ";
    result = number_of_fractions(n, prime, number_primes);
    cout << "\n" << result;
    out << result;

     in.close();
    out.close();
}