Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define vi vector<int>
  6. #define ll long long
  7. #define pb push_back
  8. #define mp make_pair
  9. #define ii pair<int,int>
  10.  
  11. vector<long long> all_divisors(long long n){
  12. vector<long long> ans;
  13. for(long long a = 1; a*a <= n; a++){ // comparação que evita o uso de doubles, a <= sqrt(n) é o mesmo que a*a <= n
  14. if(n % a == 0){
  15. long long b = n / a;
  16. ans.push_back(a);
  17. if(a != b) ans.push_back(b);
  18. }
  19. }
  20. sort(ans.begin(), ans.end()); // frescura para retornar os divisores ordenados como na primeira implementação
  21. return ans;
  22. }
  23.  
  24. vector<long long> EraseCommonDivisors(vector<long long> v1,const vector<long long> &v2)
  25. {
  26.  
  27. for (int i = 0; i < v1.size(); ++i)
  28. {
  29. for (int j = 0; j < v2.size(); ++j)
  30. {
  31. if (v1[i] == v2[j])
  32. {
  33. v1.erase(v1.begin()+i);
  34. }
  35. }
  36. }
  37.  
  38. return v1;
  39. }
  40.  
  41. int main(){
  42.  
  43. int n,m,x,y;
  44. int j =0;
  45. map<int ,vector<long long>> divs;
  46.  
  47.  
  48. scanf("%d %d",&m,&n);
  49.  
  50. for (int i = 0; i < m; ++i)
  51. {
  52. scanf("%d %d",&x,&y);
  53. divs[i] = all_divisors(x);
  54. j = i;
  55. while(y > 0){
  56. divs[i] = EraseCommonDivisors(divs[i],divs[j-1]);
  57. y--;
  58. j--;
  59. }
  60. }
  61.  
  62. for (int i = 0; i < m; ++i)
  63. {
  64. cout << divs[i].size() << endl;
  65. }
  66.  
  67. return 0;
  68. }
  69.  
  70.  
  71. /*
  72. compilar
  73. g++ arquivo.cpp -std=c++11 -o executavel
  74. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement