Advertisement
Guest User

Untitled

a guest
May 26th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. bool czy_pierwsza(int n)
  6. {
  7.     if(n <  2)
  8.         return false;
  9.  
  10.     for(int i = 2; i*i <= n; i++)
  11.         if(n % i == 0)
  12.             return false;
  13.     return true;
  14. }
  15.  
  16. int silnia(int n)
  17. {
  18.     if(n == 0) // tu musi byc zero, bo jezeli uzytkownik poda 0, to wynik nie bedzie poprawny (silnia z zera to 1); niektorzy uwazaja zero za liczbe naturalna, tak swoja droga :)
  19.         return 1;
  20.     else
  21.         return n * silnia(n - 1); // rekurencyjnie
  22. }
  23.  
  24. int suma(int n)
  25. {
  26.     int sum = 0;
  27.     for(int s = n - 1; s > 0 ; s--) // bardziej klarownie, jezeli policzymy "od tylu", ale to juz kwestia gustu
  28.         sum += s;
  29.     // drobna uwaga: mozemy to tez krotko (bez pomocy petli) policzyc przy uzyciu wzoru na ciag arytmetyczny (poziom szkoly sredniej)
  30.     return sum; // zwracamy sume
  31. }
  32.  
  33. int NWD1024(int n) // tutaj nie potrzeba wiele komentarza
  34. {
  35.     int a = n, b = 1024;
  36.     while(a != b)
  37.        if(a > b)
  38.            a -= b; // a = a - b
  39.        else
  40.            b -= a; // b = b - a
  41.     return a;
  42. }
  43.  
  44. int main()
  45. {
  46.     int n;
  47.     cout << "Podaj liczbe naturalna: " << endl;
  48.     cin >> n;
  49.     if(n <= 0) // robimy program "user-proof" - nie chcemy operowac na niepoprawnych danych :)
  50.         cout << "nie podales liczby naturalnej, nie wiem co z tym zrobic :/" << endl;
  51.     else if( czy_pierwsza(n) )
  52.         cout << "Liczba " << n << " jest pierwsza" << endl; // tutaj jedna komenda "pod" if-em, wiec nie musimy uzywac klamerek
  53.     else if( n % 2 == 0 )
  54.     // nie robimy dodatkowego warunku, czy liczba jest rozna od 2 -> sprawdza to warunek if( czy_pierwsza(n) )
  55.     // (2 jest liczba pierwsza, wiec gdy n=2 zostanie wykonane to co pod wspomnianym warunkiem, to co ponizej - nie)
  56.     { // tutaj juz sa trzy komendy "pod" if-em, wiec musimy uzyc klamerek
  57.         int liczba = NWD1024(n); // liczymy najwiekszy wspolny dzielnik
  58.         cout << "Najwiekszy wspolny dzielnik liczb " << n << " i 1024 to: " << liczba << endl;
  59.         cout << "Silnia tej liczby wynosi " << silnia(liczba)<< endl; // liczymy silnie z NWD(n, 1024)
  60.     }
  61.     else
  62.         cout << "Suma wszystkich liczb mniejszych od " << n <<" = " << suma(n) <<endl;
  63.  
  64.     // no i po kazdym sprawdzonym warunku nie dodawaj exit(0)
  65.     // po co konczyc program, skoro chcemy zobaczyc, co nam wyswietli? :)
  66.     system("PAUSE");
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement