Generic discrete_log

asked 2017-06-18 02:11:41 +0200

kdr gravatar image

updated 2020-06-09 22:01:51 +0200

FrédéricC gravatar image

I've been struggling with discrete_log function. The docs say it is the generic BSGS algorithm that is supposed to work in any group. The function works e.g. if I write

discrete_log(Mod(9, 17), Mod(2, 17), 16, operation='*')

However it keeps returning 0 when I put operation='other', e.g.

discrete_log(9, 2, 16, operation='other', op=lambda x, y: (x * y) % 17)

The op function is not even called once. Is there something that I'm doing wrong or is discrete_log not really generic?

edit retag flag offensive close merge delete


For my version 7.5.1 the first line does not work,

sage: discrete_log(Mod(9, 17), Mod(2, 17), 16, operation='*')

runs into

ValueError: No discrete log of 9 found to base 2


sage: discrete_log(Mod(9, 17), Mod(2, 17), 8, operation='*')

Typing ??discrete_log i could not find the path really considering the 'other' operation... So why not use the operations * and + available? (Or write the corresponding adapted code to search for the discrete log in a very special situation...)

dan_fulea gravatar imagedan_fulea ( 2017-06-18 17:50:08 +0200 )edit