Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Вопрос по логике

Сообщения:  [1-10]   [11-14] 

 
 автор: sim5   (18.05.2008 в 07:32)   письмо автору
 
   для: Whi-teOoS   (17.05.2008 в 16:51)
 

Интересно конечно, тем более как это обратное по модулю (имею ввиду не диапазон), если это не "чистое деление".

   
 
 автор: Klux   (17.05.2008 в 17:15)
 
   для: DEM   (17.05.2008 в 01:26)
 

> возвести всё в квадрат, получится
> a2*x2*b=1 // 2- квадрат
|b|^2 = b? :)))

   
 
 автор: Whi-teOoS   (17.05.2008 в 16:51)   письмо автору
 
   для: Whi-teOoS   (17.05.2008 в 13:59)
 


// расширенный алгоритм евклида
void extended_euclid(mpz_t a, mpz_t b, mpz_t &x, mpz_t &y, mpz_t &d)
{
    mpz_t q, r, x1, x2, y1, y2, t;

    mpz_init2(q,2048);
    mpz_init2(r,2048);
    mpz_init2(x1,2048);
    mpz_init2(x2,2048);
    mpz_init2(y1,2048);
    mpz_init2(y2,2048);
    mpz_init2(t,2048);

    if (mpz_cmp_ui(b,0) == 0)    // if (b == 0)
    {
        mpz_set(d,a);            // d = a
        mpz_set_ui(x,1);        // x = 1
        mpz_set_ui(y,0);        // y = 0
        return;
    }
    
    mpz_set_ui(x2,1);            // x2 = 1
    mpz_set_ui(x1,0);            // x1 = 0 
    mpz_set_ui(y2,0);            // y2 = 0
    mpz_set_ui(y1,1);            // y1 = 1
    
    while (mpz_cmp_ui(b,0)>0)    // while (b > 0)        
    {
        mpz_fdiv_q(q,a,b);        // q = a / b

        mpz_mul(t,q,b);            // 
        mpz_sub(r,a,t);            // r = a - q * b

        mpz_mul(t,q,x1);        //
        mpz_sub(x,x2,t);        // x = x2 - q * x1
        mpz_mul(t,q,y1);        //
        mpz_sub(y,y2,t);        // y = y2 - q * y1

        mpz_set(a,b);            // a = b
        mpz_set(b,r);            // b = r
        
        mpz_set(x2,x1);            // x2 = x1
        mpz_set(x1,x);            // x1 = x
        mpz_set(y2,y1);            // y2 = y1
        mpz_set(y1,y);            // y1 = y
    }
    mpz_set(d,a);                // d = a
    mpz_set(x,x2);                // x = x2
    mpz_set(y,y2);                // y = y2
    
    mpz_clear(q);
    mpz_clear(r);
    mpz_clear(x1);
    mpz_clear(x2);
    mpz_clear(y1);
    mpz_clear(y2);
    mpz_clear(t);
}

// обратное по модулю
void inverse(mpz_t a, mpz_t n, mpz_t &x)
{
    
    mpz_t d, y;

    mpz_init2(d,2048);
    mpz_init2(y,2048);

    extended_euclid(a, n, x, y, d);
}


если кому интересно, то вот нахождение обратного по модулю (адаптировано под большие числа (gmplib)), правда данный алгоритм возвращает и отрицательные тоже =/

Всем спасибо за участие.

   
 
 автор: Whi-teOoS   (17.05.2008 в 13:59)   письмо автору
 
   для: Trianon   (17.05.2008 в 10:40)
 

У автора не получается нати обратное по модулю, поэтому автор и попросил помощи...

   
 
 автор: Trianon   (17.05.2008 в 10:40)   письмо автору
 
   для: sim5   (17.05.2008 в 10:27)
 

У меня такое чувство, что автор пытается навесить нам что-то связанное с RSA. То ли задачу генерации ключей, то ли задачу взлома... :))

   
 
 автор: sim5   (17.05.2008 в 10:27)   письмо автору
 
   для: Trianon   (17.05.2008 в 10:20)
 

Ну да, я и забыл (хотя и читал):). С другой стороны, нет логики в этом поиске, я смысла не могу уловить. Автор то ведь пытается, вроде бы, найти не диапазон.

   
 
 автор: Trianon   (17.05.2008 в 10:20)   письмо автору
 
   для: sim5   (17.05.2008 в 10:18)
 

я так понял, что известны и а и b
Суть не в том, делится или не делится. Суть в том, чтоб остаток равнялся бы именно единице.

   
 
 автор: sim5   (17.05.2008 в 10:18)   письмо автору
 
   для: Trianon   (17.05.2008 в 10:08)
 

Вот меня и поразила "железная" логика рассуждения.) Стит ли искать, если мы узнаем, собственно говоря, делится ли произведение без остатка или нет? Ведь чтобы получить более менее логичный ответ, нам нужно знать еще и b, а известно ли оно...

   
 
 автор: Trianon   (17.05.2008 в 10:08)   письмо автору
 
   для: sim5   (17.05.2008 в 10:04)
 

надо полагать, автора устроит любое от 0 < x < b
:)

   
 
 автор: sim5   (17.05.2008 в 10:04)   письмо автору
 
   для: Trianon   (17.05.2008 в 10:03)
 

А таких значений может быть не одно.)

   

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования