2015-08-03 2 views
2

Я работаю над алгоритмом RSA в октаве, но работает не так. Проблема возникает, когда я пытаюсь использовать функцию «^». Проверьте мой пример ниже:Octave - как работать с большими числами

>> mod((80^65), 133) 

терминал дает мне:

ans = 0 

Я не могу исправить этот материал, это смешно becouse даже моя система калькулятор вернуть правильный номер (54)

+0

Matlab сказать ответ '50' ... Я думаю, это число больше, чем максимум для двойной точности – Dan

+0

Попробуйте это из обмена файлами: http://www.mathworks.com/matlabcentral/fileexchange/22725-variable-precision-integer-arithmetic – Dan

+1

Дэн, THX за вашу помощь. Я исправил свою проблему другим способом, потому что мне не нужен результат операции «^» - я хочу получить результат по модулю, поэтому я пишу быстрый алгоритм с мощным модулем –

ответ

2

вычислить это правильный способ, которым вы можете использовать быстрый алгоритм power-modulo. В C++, проверить функцию ниже, где -> а^Ь тойт:

int power_modulo_fast(int a, int b, int m) 
{ 
int i; 
int result = 1; 
int x = a % m; 

for (i=1; i<=b; i<<=1) 
{ 
    x %= m; 

    if ((b&i) != 0) 
     { 
    result *= x; 
    result %= m; 
     } 

    x *= x; 
} 

    return result; 
} 
Смежные вопросы