Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решения сравнения 
:(
    Опции темы
Кли
Дата 3.4.2019, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



Здравствуйте!!! Написал прогу для решения сравнения по модулю ax=b(mod m), где (a,m)=1(взаимно простые числа), работает правильно.
но как быть когда (a,m)>1? Например:  6x=51(mod 105) имеет три решения: x=(26,61,96)(mod 105), как это сделать?
Код



#include "stdafx.h"
#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;
}
int main()
{
    setlocale(0,"rus");
 
    int A[] = {6}, B[] = {1}, M[] = {10}, n = 1;
 
    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;
}


PM MAIL   Вверх
Кли
Дата 7.4.2019, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



мне кто-нибудь ответит?
PM MAIL   Вверх
Romikgy
Дата 7.4.2019, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



ИМХО задача бред... не описан сам алгоритм , не дана ссылка на него ... приведен код с массивами, хотя используется одно значение... 
Цитата(Кли @  3.4.2019,  16:40 Найти цитируемый пост)
  6x=51(mod 105) имеет три решения: x=(26,61,96)(mod 105)

Код

131.0
166.0
201.0
236.0
271.0
306.0
341.0
376.0
411.0
446.0
481.0
516.0
551.0

и список этот бесконечен!
Цитата(Кли @  7.4.2019,  14:19 Найти цитируемый пост)
мне кто-нибудь ответит? 

здесь никто, никому, ничего не должен!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1227 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.