Advertisement
Guest User

Rozwiązanie Zadania

a guest
Jun 29th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. vector <int> a;
  7. vector <int> b;
  8.  
  9. vector <int> erastotenes(int ssize)
  10. {
  11.     vector <int> s; //vector to return
  12.  
  13.     for(int i = 0; i <= 1; i++) s.push_back(0);
  14.     for(int i = 2; i <= ssize; i++) s.push_back(1);
  15.  
  16.     for(int i = 2; i <= (ssize/2); i++)
  17.     {
  18.         if(s[i] == 1)
  19.         {
  20.             int iter = 2*i;
  21.  
  22.             while(iter <= ssize)
  23.             {
  24.                 if(s[iter] == 1) s[iter] = 0;
  25.                 iter += i;
  26.             }
  27.         }
  28.     }
  29.  
  30.     return s;
  31. }
  32.  
  33.  
  34. vector <int> findc(vector <int>  x, vector <int> y)
  35. {
  36.     //--- preparing tables: -//
  37.     int maxInB = 0; //maximum value int vector y
  38.  
  39.     for(int i = 0; i < y.size(); i++)
  40.     {
  41.         if(y[i] > maxInB) maxInB = y[i];
  42.     }
  43.  
  44.     int* L = new int[maxInB+1]; //table with occurrences number of values in vector y
  45.  
  46.     for(int i = 0; i <= maxInB; i++) L[i] = 0;
  47.  
  48.     int maxp = 0; //maximum value in table L
  49.  
  50.     for(int i = 0; i < y.size(); i++)
  51.     {
  52.         L[y[i]]++;
  53.         if(L[y[i]] > maxp) maxp = L[y[i]];
  54.     }
  55.  
  56.     vector <int> e = erastotenes(maxp); //Eratostenes Algorithm
  57.  
  58.     //--- main program: --//
  59.     vector <int> c; //vector to return;
  60.  
  61.     for(int i = 0; i < x.size(); i++)
  62.     {
  63.         if(x[i] > maxInB or e[L[x[i]]] == 0) c.push_back(x[i]);
  64.     }
  65.  
  66.     return c;
  67. }
  68.  
  69. int main()
  70. {
  71.     vector <int> result;
  72.     a = {2, 3, 9, 2, 5, 1, 3, 7, 10};
  73.     b = {2, 1, 3 ,4, 3, 10, 6, 6, 1, 7, 10, 10, 10};
  74.  
  75.     result = findc(a, b);
  76.     for(int i = 0; i < result.size(); i++) cout << result[i] << " ";
  77.     cout << endl;
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement