Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- // Вспомогательная функция для модуля 7
- int mod7(int x)
- {
- return (x % 7 + 7) % 7;
- }
- // Функция для поиска обратного элемента b^-1 (mod 7)
- int invF7(int b)
- {
- b = mod7(b);
- if (b == 0) return -1;
- int x = 1;
- while (x < 7)
- {
- if ((b * x) % 7 == 1) return x;
- x++;
- }
- return -1; // теоретически не дойдём
- }
- int main()
- {
- while(true)
- {
- cout << "\nВведите выражение в формате: a op b\n";
- cout << "Доступные операции: + - * / ^\n";
- cout << "Введите q для выхода\n";
- int a, b;
- char op;
- cin >> a;
- if(!cin.good()) // проверка, если ввод некорректен
- {
- cin.clear();
- cin.ignore(10000, '\n');
- continue;
- }
- cin >> op;
- if(op == 'q')
- {
- cout << "Выход из программы...\n";
- break;
- }
- cin >> b;
- // Приводим всё к модулю 7
- a = mod7(a);
- b = mod7(b);
- int res = 0;
- bool ok = true;
- if (op == '+')
- {
- res = mod7(a + b);
- }
- else if (op == '-')
- {
- res = mod7(a - b);
- }
- else if (op == '*')
- {
- res = mod7(a * b);
- }
- else if (op == '/')
- {
- int invB = invF7(b);
- if(invB == -1)
- {
- cout << "Ошибка: деление на 0 в F7!\n";
- ok = false;
- }
- else
- {
- res = mod7(a * invB);
- }
- }
- else if (op == '^')
- {
- res = 1;
- int i = 0;
- while(i < b)
- {
- res = mod7(res * a);
- i++;
- }
- }
- else
- {
- cout << "Операция не поддерживается.\n";
- ok = false;
- }
- if (ok)
- {
- cout << "Результат: " << res << " (mod 7)\n";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement