Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 22:06   #1
yurets17
Пользователь
 
Регистрация: 07.10.2013
Сообщений: 15
По умолчанию Найти обратную величину по модулю

Здравствуйте! Подскажите пожалуйста ошибку?
Функция должна находить такие х и у, что a * x + b * y = gcd(a, b) = d! но х и у находит неправильные!
Код:
#include <stdio.h>
#include <iostream>
#include <cmath>

#define DEBUG
using namespace std;

void extended_euclid(long a, long b, long *x, long *y, long *d)

/* calculates a * *x + b * *y = gcd(a, b) = *d */

{
    
    long q, r, x1, x2, y1, y2;
    
    if (b == 0) {
        
        *d = a, *x = 1, *y = 0;
        
        return;
        
    }
    
    x2 = 1, x1 = 0, y2 = 0, y1 = 1;
    
#ifdef DEBUG
    printf("------------------------------");
    printf("-------------------\n");
    printf("   q    r    x    y    a    b   ");
    printf("x2   x1   y2   y1 \n");
    printf("------------------------------");
    printf("-------------------\n");
#endif
    
    while (b > 0) {
        
        q = a / b, r = a - q * b;
        
        *x = x2 - q * x1, *y = y2 - q * y1;
        
        a = b, b = r;
        
        x2 = x1, x1 = *x, y2 = y1, y1 = *y;
        
#ifdef DEBUG
        printf("%4ld %4ld %4ld %4ld ", q, r, *x, *y);
        printf("%4ld %4ld %4ld %4ld ", a, b, x2, x1);
        printf("%4ld %4ld\n", y2, y1);
#endif
        
    }
    
    *d = a, *x = x2, *y = y2;
    
#ifdef DEBUG
    printf("------------------------------");
    printf("-------------------\n");
#endif
    
}

int main(void)
{
    long a, b, d, x, y;
    printf("Введите значение а: ");
    cin>>a;
    printf("Введите значение b: ");
    cin>>b;
    cout<<"Введите модуль: "; cin>>d;
    extended_euclid(a, b, &x, &y, &d);
    
    printf("x = %ld y = %ld d = %ld\n", x, y, d);
    
    return 0;
}
yurets17 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти обратную матрицу в Си Monomah Помощь студентам 0 26.02.2011 12:03
найти ошибку в коде С задача на обратную матрицу Monomah Помощь студентам 0 20.02.2011 17:11
Найти обратную матрицу. C# MaD1z Помощь студентам 0 23.12.2009 12:47
Как найти обратную матрицу? Энжи Помощь студентам 0 07.12.2009 22:38
Помогите найти обратную матрицу в Pascal Maloiii Помощь студентам 3 20.04.2009 21:39