ToniDev

Redusul numarului

Oct 21st, 2023
647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Functie pentru citirea datelor de intrare
  5. void citire(int& dimensiuneTablou, int tablou[]) {
  6.     cout << "Introdu dimensiunea tabloului: ";
  7.     cin >> dimensiuneTablou;
  8.     for (int i = 1; i <= dimensiuneTablou; ++i) {
  9.         cout << "Introdu o valoare: ";
  10.         cin >> tablou[i];
  11.     }
  12. }
  13.  
  14. // Functie pentru calcularea redusului unui numar
  15. int redus(int numar) {
  16.     int redusNumar = 1;
  17.     int divizor = 2;
  18.  
  19.     while (numar > 1) {
  20.         int exponent = 0;
  21.  
  22.         // Impartim numarul cu divizorul cat timp este divizibil
  23.         while (numar % divizor == 0) {
  24.             numar /= divizor;
  25.             exponent++;
  26.         }
  27.  
  28.         // Daca am gasit un divizor prim, il inmultim cu redusNumar
  29.         if (exponent > 0) redusNumar *= divizor;
  30.  
  31.         divizor++;
  32.         // Optimizare: daca divizor * divizor > numar, atunci divizor = numar
  33.         if (divizor * divizor > numar)
  34.             divizor = numar;
  35.     }
  36.  
  37.     return redusNumar;
  38. }
  39.  
  40. // Functie pentru inlocuirea elementului de la pozitia 'i' cu 'redusNumar'
  41. void inloc(int tablou[], int pozitie_nr, int redusNumar) {
  42.     tablou[pozitie_nr] = redusNumar;
  43. }
  44.  
  45. // Functie pentru sortarea descrescatoare a tabloului
  46. void sortare(int dimensiuneTablou, int tablou[]) {
  47.     for (int i = 1; i < dimensiuneTablou; ++i)
  48.         for (int j = i + 1; j <= dimensiuneTablou; ++j)
  49.             if (tablou[j] > tablou[i])
  50.                 swap(tablou[i], tablou[j]);
  51. }
  52.  
  53. // Functie pentru afisarea elementelor tabloului
  54. void afisare(int dimensiuneTablou, int tablou[]) {
  55.     for (int i = 1; i <= dimensiuneTablou; ++i)
  56.         cout << tablou[i] << " ";
  57. }
  58.  
  59. int main() {
  60.     int dimensiuneTablou, tablou[1001];
  61.  
  62.     citire(dimensiuneTablou, tablou);
  63.  
  64.  
  65.     for (int i = 1; i <= dimensiuneTablou; ++i) {
  66.         int redusNumar = redus(tablou[i]);
  67.         inloc(tablou, i, redusNumar);
  68.     }
  69.  
  70.  
  71.  
  72.     sortare(dimensiuneTablou, tablou);
  73.     afisare(dimensiuneTablou, tablou);
  74.     return 0;
  75. }
  76.  
  77.  
Advertisement
Add Comment
Please, Sign In to add comment