Website Summary Files Commits Branches @commit @diff @stats
path: root / pract_SI / Pract. 04 / Solutions_10-14 / task14.cpp
blob: 405bcf76328787aa6a6a63c255630b361cbd80eb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <cmath>

using namespace std;

//Function to check whether a number is prime
bool isPrime(int number)
{
	int size = sqrt(number);
	                         
	for (int i = 2; i <= size; i++)
	{
		if (number % i == 0)
			return false;
	}

	return true;
}

//Print all prime numbers that are smaller than N
void printAllPrimeToNumber(int number) //Interval [1 ; N]
{
	std::cout << "1" << ", 2";

	for (int i = 3; i <= number; i += 2)
	{
		if (isPrime(i))
			std::cout << ", " << i;
	}

	std::cout << "." << std::endl;
}

//PrimeFactorization 
void PrimeFactor(int number)
{
	for (int i = 2; i <= number; i++)
	{
		if (isPrime(i) && number % i == 0)
		{
			if (i == number) //last step, no space
				std::cout << i;
			else
				std::cout << i << " ";

			number /= i;
			i--;
		}
	}
	std::cout << std::endl;
}

//Function whether the number N can be expressed as a sum of two prime numbers
bool checkSumOfTwoPrimes(int number,int &primeOfNumber)
{
	int size = number / 2; //36 = 7 + 29, 16 = 3 + 13 , 36 = 5 + 31
	for (int i = 2;i <= size; i++)
	{
		//16 = 3 + x , x = 16 - 3 , x = 13 PRIME
		if (isPrime(i) && isPrime(number - i))
		{
			primeOfNumber = i;
			return true; 
		}
	}
	return false;
}

int main()
{
	int number;
	std::cin >> number;

	if (isPrime(number))
		std::cout << number << " is prime!" << std::endl;
	else
		std::cout << number << " is composite number!" << std::endl;

	std::cout << std::endl << "Prime numbers up to " << number << " are: ";
	printAllPrimeToNumber(number);

	std::cout << "Factoring of: " << number << " is: ";
	PrimeFactor(number);

	int primeOfNumber;
	if (checkSumOfTwoPrimes(number, primeOfNumber))
		std::cout << primeOfNumber << " + " << number - primeOfNumber << std::endl;
	else
		std::cout << "Error!" << std::endl;
	
	return 0;
}