Форум программистов, компьютерный форум CyberForum.ru

Решение линейных сравнений по модулю a*x = b (mod m) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка при компиляции OpenGl Игры http://www.cyberforum.ru/cpp-beginners/thread1061664.html
Делаю игру по туториалу. Вот код игры: #include <glut.h> #include <stdlib.h> using namespace std; class snake{ public:
C++ Найти номер наименьшего положительного числа в заданной последовательности. Если в ней отсутствуют положительные числа, ответом должно быть -1 Условие: Дано натуральное число n (n < 100) и действительные числа 1a, 2a, ..., na. Найти номер наименьшего положительного числа в заданной последовательности. Если в ней отсутствуют положительные числа, ответом должно быть значение -1. Решение: И так я все сделал, нашел минимум. все работает. но есть одно но а именно Если в ней отсутствуют положительные числа, ответом должно быть значение... http://www.cyberforum.ru/cpp-beginners/thread1061639.html
STL.Find() C++
Доброго времени суток. Есть такой код,где используется алгоритм find() библиотеки STL. Данная функция возвращает адрес эл-та. Вопрос возник о строчке,которую я выделил. Зачем мы из адреса эл-та вычитаем адрес начала массива ? Разве не получится "каша" ? И как можно вычитать адреса ? Если это своего рода смещение,то как оно работает ?
C++ Сложение без сложения
Напишите рекурсивную функцию sum(a, b), возвращающую сумму двух целых неотрицательных чисел. Из всех арифметических операций допускаются только +1 и -1. Также нельзя использовать циклы. Я совсем не знаю как делать я новичёк :( Помогите, пожалуйста!
C++ Поиск максимального числа среди введённых чисел. Проверить код http://www.cyberforum.ru/cpp-beginners/thread1061610.html
Он должен делать следующее: пользователь вводит число, если оно меньше 8 то считается мат. выражения, если больше то поиск максимального числа среди введённых доданных чисел, отрицательное число завершение ввода.() #include <stdio.h> #include <math.h> #include <conio.h> float rez_math(float l=10.5, float a=0.154, float x=5.3) { float y;
C++ Рисунок Graphics используя WinBGI Подскажите, пожалуйста, как из вот этого вот: #include <graphics.h> #include <math.h> #include <stdlib.h> #include <ctype.h> #include <conio.h> void exit(); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const int CENTR_X=320, CENTR_Y=200, RADIUS=50, LUCH_LEN=100; подробнее

Показать сообщение отдельно
Alexdemath
 Аватар для Alexdemath
125 / 122 / 6
Регистрация: 11.04.2010
Сообщений: 253
02.01.2014, 19:20     Решение линейных сравнений по модулю a*x = b (mod m)
Вроде, получилось и для одиночных линейных сравнения, и для систем таких сравнений

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cmath>
using namespace std;
 
int solveCongruences(int A[], int B[], int M[], int n)
{   
    int x = 0, mod = 1;
 
    for (int i = 0; i < n; i++)
     { int r1 = A[i]*mod, r2 = M[i], x1 = 1, x2 = 0, r = 1;
       while (r != 0)
        { int q = (int)floor((double)r1/r2), t = x1-q*x2;
          x1 = x2; x2 = t; r = r1-q*r2; r1 = r2; r2 = r;
        }
       int b = B[i]-A[i]*x;
       if (b % r1 != 0){ cout << "Не имеет решений"; return 0; }
       x += mod * b * x1/r1;
       mod *= M[i]/r1; 
     }
 
    if (x < 0 || x >= mod) x -= mod * (int)floor((double)x/mod);
 
    cout << "x = " << x << " (mod " << mod << ")";
    return 0;
}
Пример вызова этой функции для решения системы сранений
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}2x\equiv 2\quad (\operatorname{mod}\quad 6),\\ 3x\equiv 2\quad (\operatorname{mod}\quad 7),\\2x\equiv 4\quad (\operatorname{mod}\quad 8)\end{cases}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    setlocale(0,"rus");
 
    int A[] = {2,3,2}, B[] = {2,2,4}, M[] = {6,7,8}, n = 3;
 
    cout << "Решение " << (n==1 ? "сравнения" : "системы сравнений")
         << " по модулю:\n\n";
 
    for (int i = 0; i < n; i++) 
     { cout << "  " << A[i] << "x = " << B[i] << " (mod " << M[i] << ")\n"; }
 
    cout << "\nОтвет: ";
 
    solveCongruences(A, B, M, n);
     
    system("pause > null");
    return 0;
}
 
Текущее время: 02:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru