Advertisement
Solingen

z1.3.cpp

Dec 21st, 2024
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Вспомогательная функция для модуля 7
  5. int mod7(int x)
  6. {
  7.     return (x % 7 + 7) % 7;
  8. }
  9.  
  10. // Функция для поиска обратного элемента b^-1 (mod 7)
  11. int invF7(int b)
  12. {
  13.     b = mod7(b);
  14.     if (b == 0) return -1;
  15.     int x = 1;
  16.     while (x < 7)
  17.     {
  18.         if ((b * x) % 7 == 1) return x;
  19.         x++;
  20.     }
  21.     return -1; // теоретически не дойдём
  22. }
  23.  
  24. int main()
  25. {
  26.     while(true)
  27.     {
  28.         cout << "\nВведите выражение в формате: a op b\n";
  29.         cout << "Доступные операции: + - * / ^\n";
  30.         cout << "Введите q для выхода\n";
  31.        
  32.         int a, b;
  33.         char op;
  34.         cin >> a;
  35.         if(!cin.good()) // проверка, если ввод некорректен
  36.         {
  37.             cin.clear();
  38.             cin.ignore(10000, '\n');
  39.             continue;
  40.         }
  41.         cin >> op;
  42.         if(op == 'q')
  43.         {
  44.             cout << "Выход из программы...\n";
  45.             break;
  46.         }
  47.         cin >> b;
  48.  
  49.         // Приводим всё к модулю 7
  50.         a = mod7(a);
  51.         b = mod7(b);
  52.  
  53.         int res = 0;
  54.         bool ok = true;
  55.  
  56.         if (op == '+')
  57.         {
  58.             res = mod7(a + b);
  59.         }
  60.         else if (op == '-')
  61.         {
  62.             res = mod7(a - b);
  63.         }
  64.         else if (op == '*')
  65.         {
  66.             res = mod7(a * b);
  67.         }
  68.         else if (op == '/')
  69.         {
  70.             int invB = invF7(b);
  71.             if(invB == -1)
  72.             {
  73.                 cout << "Ошибка: деление на 0 в F7!\n";
  74.                 ok = false;
  75.             }
  76.             else
  77.             {
  78.                 res = mod7(a * invB);
  79.             }
  80.         }
  81.         else if (op == '^')
  82.         {
  83.             res = 1;
  84.             int i = 0;
  85.             while(i < b)
  86.             {
  87.                 res = mod7(res * a);
  88.                 i++;
  89.             }
  90.         }
  91.         else
  92.         {
  93.             cout << "Операция не поддерживается.\n";
  94.             ok = false;
  95.         }
  96.  
  97.         if (ok)
  98.         {
  99.             cout << "Результат: " << res << " (mod 7)\n";
  100.         }
  101.     }
  102.     return 0;
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement