Advertisement
GerONSo

Untitled

Nov 22nd, 2020
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. void multiply(std::vector<int> &a, std::vector<int> &b, std::vector<int> &res) {
  2. if(std::max(a.size(), b.size()) < 100) {
  3. simple_multiply(a, b, res);
  4. return;
  5. }
  6. if(a.size() < b.size()) {
  7. std::swap(a, b);
  8. }
  9.  
  10. while(b.size() < a.size()) {
  11. b.push_back(0);
  12. }
  13. while((b.size() & 1)) {
  14. a.push_back(0);
  15. b.push_back(0);
  16. }
  17. int mid = a.size() / 2;
  18. std::vector<int> al, ar, bl, br;
  19. for(int i = 0; i < a.size(); i++) {
  20. if(i < mid) {
  21. al.push_back(a[i]);
  22. bl.push_back(b[i]);
  23. }
  24. else {
  25. ar.push_back(a[i]);
  26. br.push_back(b[i]);
  27. }
  28. }
  29. std::vector<int> r1, r2, r3, r4;
  30. std::vector<int> kl, kr;
  31. sum(al, ar, kl);
  32. sum(bl, br, kr);
  33. multiply(al, bl, r1);
  34. multiply(kl, kr, r2);
  35. multiply(ar, br, r4);
  36. reverse(r1.begin(), r1.end());
  37. reverse(r2.begin(), r2.end());
  38. reverse(r4.begin(), r4.end());
  39. decrease(r2, r1, r3);
  40. decrease(r3, r4, r2);
  41. for(int i = 0; i < mid; i++) {
  42. r2.push_back(0);
  43. }
  44. for(int i = 0; i < 2 * mid; i++) {
  45. r4.push_back(0);
  46. }
  47. reverse(r1.begin(), r1.end());
  48. reverse(r2.begin(), r2.end());
  49. reverse(r4.begin(), r4.end());
  50. sum(r1, r2, res);
  51. std::vector<int> res2;
  52. sum(res, r4, res2);
  53. res = res2;
  54. }
  55. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement