Advertisement
Piratux

Untitled

Dec 15th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. void getNumbers(string line, vector<int>& numbers);
  8. long long simpleLCM(long long& lcm, int f, int n);
  9. long long primeLCM(vector<int> numbers, long long lcm);
  10. int getPrime(int n);
  11.  
  12. int main()
  13. {
  14.     int a = 0, f, n, o;
  15.     long long lcm = 1;
  16.     string line;
  17.     vector<int> numbers;
  18.     cout << "Choose with what numbers you want to find LCM" << endl;
  19.     cout << "1. From 1 to specific number" << endl;
  20.     cout << "2. From specific number to specific number" << endl;
  21.     cout << "3. Several seperate numbers" << endl;
  22.     while (true)
  23.     {
  24.         cin >> o;
  25.         switch (o)
  26.         {
  27.         case 1:
  28.             cout << "Enter specific number" << endl;
  29.             cin >> n;
  30.             f = 1;
  31.             lcm = simpleLCM(lcm, f, n);
  32.             goto loc2;
  33.         case 2:
  34.             cout << "Enter 1st specific number" << endl;
  35.             cin >> f;
  36.             cout << "Enter 2nd specific number" << endl;
  37.             cin >> n;
  38.             for (int i = f; i <= n; i++)
  39.                 numbers.push_back(i);
  40.             goto loc1;
  41.         case 3:
  42.             cout << "Enter several numbers seperated by a space" << endl;
  43.             cin.ignore();
  44.             getNumbers(line, numbers);
  45.             goto loc1;
  46.         default:
  47.             cout << "Your option is invalid" << endl;
  48.             break;
  49.         }
  50.     }
  51.     loc1:
  52.     lcm = primeLCM(numbers, lcm);
  53.     loc2:
  54.     cout << lcm << endl;
  55.     return 0;
  56. }
  57. void getNumbers(string line, vector<int>& numbers)
  58. {
  59.     string s = "";
  60.     getline(cin, line);
  61.     for (auto x : line) {
  62.         if (x == ' ')
  63.         {
  64.             numbers.push_back(stoi(s));
  65.             s = "";
  66.         }
  67.         else
  68.             s = s + x;
  69.     }
  70.     numbers.push_back(stoi(s));
  71. }
  72. long long simpleLCM(long long& lcm, int f, int n)
  73. {
  74.     vector<long long> list;
  75.     for (int i = f; i <= n; i++)
  76.     {
  77.         list.push_back(i);
  78.         if (lcm % i == 0)
  79.             continue;
  80.         lcm *= i;
  81.         for (size_t ii = 0; ii < list.size() - 1; ii++)
  82.         {
  83.             if (i % list[ii] == 0)
  84.             {
  85.                 lcm /= list[ii];
  86.                 list.erase(list.begin() + ii);
  87.             }
  88.         }
  89.     }
  90.     return lcm;
  91. }
  92. long long primeLCM(vector<int> numbers, long long lcm)
  93. {
  94.     bool divided = false;
  95.     int prime = 2;
  96.     int n = 2;
  97.     while (true)
  98.     {
  99.         for (size_t i = 0; i < numbers.size(); i++)
  100.         {
  101.             if (numbers[i] != 1)
  102.                 goto loc2;
  103.         }
  104.         return lcm;
  105.         loc2:
  106.         for (size_t i = 0; i < numbers.size(); i++)
  107.         {
  108.             if (numbers[i] % prime == 0)
  109.             {
  110.                 numbers[i] /= prime;
  111.                 divided = true;
  112.             }
  113.         }
  114.         if (divided == true)
  115.         {
  116.             lcm *= prime;
  117.             divided = false;
  118.         }
  119.         else
  120.         {
  121.             prime = getPrime(n);
  122.             n++;
  123.         }
  124.     }
  125. }
  126. int getPrime(int n)
  127. {
  128.     int p = 1;
  129.     for (int i = 3; ; i += 2)
  130.     {
  131.         for (int j = 3; j < i; j += 2)
  132.         {
  133.             if (i % j == 0)
  134.                 goto loc3;
  135.         }
  136.         p++;
  137.         loc3:
  138.         if (p == n)
  139.             return i;
  140.     }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement