From f05726d51dd6c41c23c337c2d4b0324ad231dbc8 Mon Sep 17 00:00:00 2001 From: Angeld55 Date: Fri, 13 Nov 2020 20:45:46 +0200 Subject: added examples sem 5 --- Sem. 5/Task 1.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Sem. 5/Task 1.cpp (limited to 'Sem. 5/Task 1.cpp') diff --git a/Sem. 5/Task 1.cpp b/Sem. 5/Task 1.cpp new file mode 100644 index 0000000..20ca708 --- /dev/null +++ b/Sem. 5/Task 1.cpp @@ -0,0 +1,58 @@ +#include +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 -- cgit v1.3.1-23-gd82d