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;
- }
- // Сложение
- int addF7(int a, int b)
- {
- return (mod7(a) + mod7(b)) % 7;
- }
- // Вычитание
- int subF7(int a, int b)
- {
- return mod7(mod7(a) - mod7(b));
- }
- // Умножение
- int mulF7(int a, int b)
- {
- return (mod7(a) * mod7(b)) % 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; // если что-то пойдёт не так
- }
- // Деление a / b
- int divF7(int a, int b)
- {
- int inv = invF7(b);
- if (inv == -1)
- {
- // Деление не определено
- return -1;
- }
- return mulF7(a, inv);
- }
- // Возведение a в степень b (a^b)
- int powF7(int base, int exp)
- {
- int result = 1;
- int i = 0;
- while (i < exp)
- {
- result = mulF7(result, base);
- i++;
- }
- return result;
- }
- int main()
- {
- int a, b;
- char op;
- cout << "Введите выражение (a op b), op ∈ {+, -, *, /, ^}\n";
- cin >> a >> op >> b;
- // Сразу приводим a и b к [0..6]
- a = mod7(a);
- b = mod7(b);
- int answer = 0;
- bool valid = true;
- if (op == '+')
- {
- answer = addF7(a, b);
- }
- else if (op == '-')
- {
- answer = subF7(a, b);
- }
- else if (op == '*')
- {
- answer = mulF7(a, b);
- }
- else if (op == '/')
- {
- answer = divF7(a, b);
- if (answer == -1)
- {
- cout << "Ошибка: деление на 0 или нет обратного в F7\n";
- valid = false;
- }
- }
- else if (op == '^')
- {
- answer = powF7(a, b);
- }
- else
- {
- cout << "Неизвестная операция\n";
- valid = false;
- }
- if (valid)
- {
- cout << "Результат по модулю 7: " << answer << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement