Advertisement
adwas33

Untitled

Jan 21st, 2022
724
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. vector<int> wszystkieCzynnikiPierwsze(int x)
  7. {
  8.     int i = 2,e;
  9.     vector<int> liczbyPierwsze;
  10.     e = (int)sqrt((double)x); // nie trzeba robic floor poniewaz wystarczy rzutowanie na int-a - czesc ulamkowa zostanie zignorowana
  11.     while (i <= e)
  12.     {
  13.         while (x%i == 0) // jesli x dzieli sie przez i
  14.         {
  15.             liczbyPierwsze.push_back(i);
  16.             x /= i;
  17.             e = (int)sqrt((double)x);
  18.         }
  19.         i++;
  20.  
  21.     }
  22.     if (x > 1)
  23.         liczbyPierwsze.push_back(x);
  24.  
  25.     return liczbyPierwsze;
  26. }
  27. ///
  28. /// \param tablica MUSI BYC POSORTOWANA BY DZIALALO DOBRZE
  29. /// \return ZWRACA obiekt który ma w sobie 1)Liczbe pierwsza 2)Jej Wykladnik
  30.  
  31. pair<int,int> stworzObiektZWykladnikiem(vector<int> &tablica)
  32. {
  33.     if(!tablica.empty())
  34.     {
  35.         pair<int,int> obiekt;
  36.         obiekt.first=tablica[0];
  37.         int iloscWystapien=0;
  38.         for (const auto &item : tablica)
  39.         {
  40.             if(tablica[0]==obiekt.first)
  41.             {
  42.                 tablica.erase(tablica.begin());
  43.                 iloscWystapien++;
  44.             } else break;
  45.         }
  46.         obiekt.second=iloscWystapien;
  47.         return obiekt;
  48.     }
  49.  
  50. }
  51.  
  52. vector<pair<int,int>> wszystkieDzielniki(vector<int> &tablicaDzielnikow)
  53. {
  54.     vector<pair<int,int>> dzielnikiZWykladnikiem;
  55.     while(!tablicaDzielnikow.empty())
  56.     {
  57.         dzielnikiZWykladnikiem.push_back(stworzObiektZWykladnikiem(tablicaDzielnikow));
  58.     }
  59.     return dzielnikiZWykladnikiem;
  60. }
  61.  
  62. ostream &operator<<(ostream &os, const pair<int,int> &d) {
  63.     os  << d.first ;
  64.     if(d.second!=0&&d.second!=1)
  65.     {
  66.         os<< "^" << d.second;
  67.     }
  68.  
  69.     return os;
  70. }
  71.  ostream &operator<<(ostream &os, const vector<pair<int,int>> &d) {
  72.  
  73. if(d.empty())
  74.     return os;
  75. else if(d.size()==1)
  76. {
  77.     os<<d[0]<<endl;
  78.     return os;
  79. }else
  80. {
  81.     for (int index = 0; index < d.size()-1; ++index) {
  82.         os<<d[index]<<"*";
  83.     }
  84.     os<<d[d.size()-1]<<endl;
  85.     return os;
  86. }
  87.  
  88. }
  89.  
  90.  
  91. int main()
  92. {
  93.  
  94.     int ilosc=0;
  95.     vector<int> liczbyDoSprawdzenia;
  96.  
  97.     int x;
  98.     cin>>ilosc;
  99.     vector<vector<int>> wszystkieDzielnikiZmienna;
  100.     for(int i=0;i<ilosc;i++)
  101.     {
  102.         cin>>x;
  103.         liczbyDoSprawdzenia.push_back(x);
  104.         wszystkieDzielnikiZmienna.push_back(wszystkieCzynnikiPierwsze(x));
  105.  
  106.     }
  107.     vector<vector<pair<int,int>>> wynik;
  108.     for ( auto &item : wszystkieDzielnikiZmienna)
  109.     {
  110.         wynik.push_back(wszystkieDzielniki(item));
  111.     }
  112.     for (const auto &item : wynik)
  113.         cout<<item;
  114.  
  115.  
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement