diff options
sem 8
7 files changed, 217 insertions, 0 deletions
| -rw-r--r-- | Sem. 05/README.md | 18 | ||||
| -rw-r--r-- | Sem. 05/Task 1.cpp | 58 | ||||
| -rw-r--r-- | Sem. 05/Task 2.cpp | 39 | ||||
| -rw-r--r-- | Sem. 05/Task 3.cpp | 27 | ||||
| -rw-r--r-- | Sem. 05/Task 4.cpp | 23 | ||||
| -rw-r--r-- | Sem. 05/Task 5.cpp | 33 | ||||
| -rw-r--r-- | Sem. 05/Task 6.cpp | 19 |
diff --git a/Sem. 05/README.md b/Sem. 05/README.md new file mode 100644 index 0000000..b65599b --- /dev/null +++ b/Sem. 05/README.md @@ -0,0 +1,18 @@ +**Задача 1:** Въвежда Ñ�е неотрицателно чиÑ�ло n. Да Ñ�е провери дали n е проÑ�то. + +**Задача 2:** Въвежда Ñ�е неотрицателно чиÑ�ло n. Да Ñ�е отпечата неговото разбиване на проÑ�ти множители. + +*Вход: 288, Изход: 2^5 * 3^2* + +**Задача 3:** Въвежда Ñ�е неотрицателно чиÑ�ло n. ПреÑ�метнете n + 1, използвайки Ñ�амо цикли и побитови операции. + +**Задача 4:** Въвеждат Ñ�е неотрицателни чиÑ�ла n и k. ПреÑ�метнете n + k, използвайки Ñ�амо цикли и побитови операции. + +**Задача 5:** Въвеждат Ñ�е неотрицателни чиÑ�ла n и k. ПреÑ�метнете n * k, използвайки Ñ�амо цикли и побитови операции. + +**Задача 6:** Ð’Ñ�Ñ�ко еÑ�теÑ�твено чиÑ�ло Ñ�е предÑ�тавÑ� по единÑ�твен начин като Ñ�ума на **различни**(не Ñ�е повтарÑ�Ñ‚) Ñ�тепени на двойката. +Въвежда Ñ�е еÑ�теÑ�твено чиÑ�ло n. Отпечатайте това разбиване на n. + +*Вход: 26, Изход: 2^1 + 2^3 + 2^4* + +*Вход: 15, Изход: 2^0 + 2^1 + 2^2 + 2^3* diff --git a/Sem. 05/Task 1.cpp b/Sem. 05/Task 1.cpp new file mode 100644 index 0000000..20ca708 --- /dev/null +++ b/Sem. 05/Task 1.cpp @@ -0,0 +1,58 @@ +#include <iostream> +using namespace std; + +int main() +{ + unsigned int n; + cin >> n; + + //Ðåøåíèå 1: + bool isPrime1 = true; + for (int i = 2; i <= n - 1; i++) + { + if (n % i == 0) + isPrime1 = false; + } + cout << isPrime1 << endl; + // Ðåøåíèåòî ðàáîòè. Íî ïðàâè èçëèøíè ïðîâåðêè. Íå å íåîáõîäèìî äà òúðñèì äåëèòåë ÷àê äî n-1. + // Àêî íå íàìåðèì äåëèòåë îò êîðåí(n), òî íÿìà äà íàìåðèì è ñëåä êîðåíà. + + //Ðåøåíèå 2: + bool isPrime2 = true; + for (int i = 2; i <= sqrt(n); i++) + { + if (n % i == 0) + isPrime2 = false; + } + cout << isPrime2 << endl; + + // Ðåøåíèåòî ïàê ðàáîòè. Íî íà âñÿêà ïðîâåðêà i <= sqrt(n) ïðåñìÿòàìå êîðåí(n), êîåòî å î÷åâèäíî, ÷å å èçëèøíî. + // Ìîæå äà ãî ñìåòíåì âåäíúæ è ïîñëå äà ãî ïîëçâàìå. + + //Ðåøåíèå 3: + bool isPrime3 = true; + double temp = sqrt(n); + for (int i = 2; i <= temp; i++) + { + if (n % i == 0) + isPrime3 = false; + } + cout << isPrime3 << endl; + + // È òîâà ðåøåíèå äàâà âåðåí ðåçóëòàò. Íî îòíîâî å âúçìîæíî äà ïðàâè èçëèøíè ïðîâåðêè. + // Ïðè âúâåæäàíå íà ÷èñëîòî 2000000, î÷åâèäíî áè áèëî, ÷å ÷èñëîòî ÍÅ å ïðîñòî, ïîíåæå ñå äåëè íà 2. + // Íî íàøåòî ðåøåíèå ùå ïðîäúëæè äà òúðñè äåëèòåëè, äîðè ñëåä êàòî å âèäÿëî, ÷å èìà òàêúâ (â ñëó÷àÿ ÷èñëîòî 2). + + //Ôèíàëíî ðåøåíèå: + bool isPrime4 = true; + double temp2 = sqrt(n); + for (int i = 2; i <= temp2; i++) + { + if (n % i == 0) + { + isPrime4 = false; + break; + } + } + cout << isPrime4 << endl; +}
\ No newline at end of file diff --git a/Sem. 05/Task 2.cpp b/Sem. 05/Task 2.cpp new file mode 100644 index 0000000..0f4408d --- /dev/null +++ b/Sem. 05/Task 2.cpp @@ -0,0 +1,39 @@ +#include <iostream> +using namespace std; + +int main() +{ + unsigned int n; + cin >> n; + + for (int i = 2; n != 1; i++) //Âñè÷êè âúçìîæíè äåëèòåëè (ìíîæèòåëè) íà n 2,3,4,5,..., + { + // Ïðîâåðÿâàìå äàëè ÷èñëîòî å ïðîñòî (ïîíåæå íè èíòåðåñóâàò ñàìî ïðîñòè ìíîæèòåëè) + bool isPrime = true; + double temp = sqrt(i); + for (int j = 2; j <= temp; j++) + { + if (i % j == 0) + { + isPrime = false; + break; + } + } + + if (!isPrime) + continue; //Àêî íå å ïðîñòî - íå íè èíòåðåñóâà òîâà ÷èñëî. Ïðåìèíàâàìå êúì ñëåäâàùîòî. + + // Ùîì ñìå ñòèãíàëè òóê, ñìå óáåäåíè, ÷å i å ïðîñòî ÷èñëî. + // Èñêàìå äà âèäèì êîëêî ïúòè i äåëè n. + + int pow = 0; + while (n % i == 0) + { + n /= i; + pow++; + } + + if (pow != 0) //Àêî ïîíå âåäíúæ ãî å ðàçäåëèëî - çíà÷è ó÷àñòâà â ðàçáèâàíåòî íà ïðîñòè ìíîæèòåëè. + cout << i << "^" << pow << " "; + } +}
\ No newline at end of file diff --git a/Sem. 05/Task 3.cpp b/Sem. 05/Task 3.cpp new file mode 100644 index 0000000..6723ee2 --- /dev/null +++ b/Sem. 05/Task 3.cpp @@ -0,0 +1,27 @@ +#include <iostream> +using namespace std; + + +//Àëãîðèòúìúò çà ñúáèðàíå ñ 1 â äâîè÷åí çàïèñ: +//Îò äÿñíî íà ëÿâî - ïðàâèì âñè÷êè 1-öè íà 0, äîêàòî íå ñðåùíåì ïúðâàòà 0. +//Ïúðâàòà 0 ÿ ïðàâèì íà 1. + +// 101001111 + 1 +// 101010000 +int main() +{ + unsigned int n; + cin >> n; + + int mask = 1; //Íàé-äåñíèÿò áèò íà ìàñêàòà å 1-öà. Âñè÷êè äðóãè ñà 0-ëè. + + + while ((n & mask) > 0) //Ïðîâåðÿâàìå äàëè òåêóùèÿ áèò å 1-öà. (ïðè ïúðâîòî âëèçàíå, ïðîâåðÿâàìå íàé-äåñíèÿ) + { + n ^= mask; // Ïðàâèì ãî íà 0 ( n = n ^ mask) + mask <<= 1; // Îòìåñòâàìå ìàñêàòà, çà äà ïðîâåðèì áèò-à â ëÿâî. (mask = mask << 1) + } + + //Îòêðèëè ñìå ïúðâàòà 0. 1-öàòà å íà òî÷íàòà ïîçèöèÿ â ìàñêàòà. + n |= mask; // Ïðàâèì íà 1-öa (n = n | mask) +}
\ No newline at end of file diff --git a/Sem. 05/Task 4.cpp b/Sem. 05/Task 4.cpp new file mode 100644 index 0000000..6d57f92 --- /dev/null +++ b/Sem. 05/Task 4.cpp @@ -0,0 +1,23 @@ +#include <iostream> +using namespace std; + +int main() +{ + unsigned int n, k; + cin >> n >> k; + + + //ИзпълнÑ�ваме k пъти Ñ�ъбирането на n Ñ� 1 + for (int i = 0; i < k; i++) + { + //Събираме n Ñ� 1-ца (кодът от миналата задача) + int mask = 1; + while ((n & mask) > 0) + { + n ^= mask; + mask <<= 1; + } + n |= mask; + } + cout << n << endl; +} diff --git a/Sem. 05/Task 5.cpp b/Sem. 05/Task 5.cpp new file mode 100644 index 0000000..6f3d0dd --- /dev/null +++ b/Sem. 05/Task 5.cpp @@ -0,0 +1,33 @@ +#include <iostream> +using namespace std; + +int main() +{ + unsigned int n, k; + cin >> n >> k; + + //Ñìÿòà ìå n*k. n+n+n...+n (k ïúòè). + //Ã�ðèëà ãà ìå êîäà îò ïðåäèøÃà òà çà äà ÷à k ïúòè + + + int result = 0; + + //Събирането Ñ� n го правим k пъти. Т.е Ñ�тава точно n*k + for (int t = 0; t < k; t++) + { + + //Събирането Ñ� 1 го правим пъти. Т.е Ñ�тава +n + for (int i = 0; i < n; i++) + { + //Събираме n Ñ� 1. + int mask = 1; + while ((result & mask) > 0) + { + result ^= mask; + mask <<= 1; + } + result |= mask; + } + } + cout << result << endl; +} diff --git a/Sem. 05/Task 6.cpp b/Sem. 05/Task 6.cpp new file mode 100644 index 0000000..415cae4 --- /dev/null +++ b/Sem. 05/Task 6.cpp @@ -0,0 +1,19 @@ +#include <iostream> +using namespace std; + +int main() +{ + unsigned int n; + cin >> n; + + int currentPosition = 0; + while (n != 0) + { + if (n % 2 == 1) //ПроверÑ�ваме поÑ�ледниÑ� бит дали е 1. + { + cout << "2^" << currentPosition << " "; + } + currentPosition++; + n >>= 1; // Премахваме поÑ�ледниÑ� бит и предпоÑ�ледниÑ� Ñ�тава поÑ�леден (n /=2); + } +} |
