Cod sursa(job #1936315)

Utilizator codyCodreanu Ionut cody Data 22 martie 2017 23:46:09
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>

static const int MAX_SIZE_FOR_NUMBER = 1000;
using namespace std;

int main() {
    ifstream inputFile;

    inputFile.open("fractii.in", ifstream::in);
    if (!inputFile.is_open()) {
        cout << "Input file is not opened";
        return -1;
    }

    long long int maxNumber;
    inputFile >> maxNumber;

    inputFile.close();

    long long iterator = 2;
    int isPrimeStorage[maxNumber];
    memset(isPrimeStorage, 0, sizeof(isPrimeStorage));
    double totientStorage[maxNumber];
    memset(totientStorage, 0, sizeof(totientStorage));
    long long int totientTotal = 1;
    while (iterator <= maxNumber) {
        long long int iteratorStorageIndex = iterator - 1;
        if (isPrimeStorage[iteratorStorageIndex] == 0) {
            totientTotal += 2 * (iterator - 1);
            long long int iteratorCopy = iterator + iterator;
            double currentPrimeInverse = 1.0 / iterator;
            double totientPartForPrime = 1.0 - currentPrimeInverse;
            while (iteratorCopy <= maxNumber) {
                long long int multipliersStorageIndex = iteratorCopy - 1;
                isPrimeStorage[multipliersStorageIndex] = 1;
                if (totientStorage[multipliersStorageIndex] == 0) {
                    totientStorage[multipliersStorageIndex] = iteratorCopy;
                }
                totientStorage[multipliersStorageIndex] *= totientPartForPrime;
                iteratorCopy += iterator;
            }
        } else {
            totientTotal += 2 + 2 * ((int) totientStorage[iteratorStorageIndex] - 1);
        }
        iterator++;
    }

    ofstream outputFile;
    outputFile.open("fractii.out", ofstream::out);
    if (!outputFile.is_open()) {
        cout << "Output file is not opened";
        return -1;
    }

    outputFile << totientTotal;

}