Cod sursa(job #1691247)

Utilizator DirtyDIonut Dracea DirtyD Data 17 aprilie 2016 17:21:15
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include<iostream>
#include<algorithm>
#include<vector>

std::vector<long int> primesErastotene(long int number);
void printVector(std::vector<long int> vectorArray);
long int numberOfCoprime(long int number, std::vector<long int> primeArray);

int main()

{

	std::cout << "Please enter the number.";
	std::cout << "\nN= ";
	long int n;
	std::cin >> n;
	std::vector<long int> primes;
	primes = primesErastotene(n);
	//printVector(primes);
	long int maxNoOfFractions=0;
	for (long int i = 1; i <=n; i++)
	{
		maxNoOfFractions += numberOfCoprime(i, primes);

   
	}
	std::cout << (2*maxNoOfFractions-1) << "\n\n";
	return 0;
}


std::vector<long int> primesErastotene(long int number)
{
    std::vector<bool> allNumbers(number, true);
    std::vector<long int> primes;

    //std::cout << nrFractii<<"\n";
    //std::cout << "0\n\n";
    for (long int i = 2; i < sqrt(number); i++)
    {
	    int j;
	    j = i*i;
	    while (j < number)
	    {
		    allNumbers[j] = false;
		    j = j + i;
	    }
     }
//std::cout << "1\n\n";
	for (long int i = 2; i < number; i++)
	{
		if (allNumbers[i] == true)
		{
			primes.push_back(i);
			//std::cout << i << std::endl;
		}
	}
	return primes;
}

void printVector(std::vector<long int> vectorArray)

{
	for (long int i=0; i < vectorArray.size(); i++)
	{
		std::cout << vectorArray[i]<<"\n";
	}
}

long int numberOfCoprime(long int number,std::vector<long int> primeArray)
{
	long int noOfCoprimes;
	noOfCoprimes = number;
	for (long int i = 0; primeArray.size(); i++)
	{   
		bool coprime = true;
		while (number%primeArray[i] == 0)
		{
			number = number / primeArray[i];
			coprime = false;
		}
		if (coprime == false)
		{

			noOfCoprimes = noOfCoprimes*(1 - 1.0 / primeArray[i]);
		}
		if (number == 1)
			{
				break;
			}
	}
	return noOfCoprimes;
}