3
$\begingroup$

If I have a list of numbers l = {256/11, 258/11, 263/11, 263/11, -22, -22, 251/11, 0, 261/11, -22, 265/11, 259/11, 0, 259/11} which I want to evaluate mod 26, how do I do that? I know I can do Mod[l, 26], but that just gives me {256/11, 258/11, 263/11, 263/11, 4, 4, 251/11, 0, 261/11, 4, 265/11, 259/11, 0, 259/11} without evaluating the fractions. How do I perform this calculation so that every element is an integer mod 26?

$\endgroup$
5
$\begingroup$

PowerMod can help:

fracMod = Mod[Numerator[#] * PowerMod[Denominator@#, -1, 26], 26] &;

fracMod@{256/11, 258/11, 263/11, 263/11, -22, -22, 251/11, 0, 
  261/11, -22, 265/11, 259/11, 0, 259/11}
(*  {2, 14, 5, 5, 4, 4, 11, 0, 19, 4, 17, 7, 0, 7}  *)

Addendum -- General-purpose function

ClearAll[ratMod];
SetAttributes[ratMod, Listable]; 
ratMod[Rational[n_, d_], m_] := Mod[n*PowerMod[d, -1, m], m];
ratMod[n_Integer, m_] := Mod[n, m];
ratMod[m_][x_] := ratMod[x, m];      (* operator form *)

OP's example:

ratMod[26]@ {256/11, 258/11, 263/11, 263/11, -22, -22, 251/11, 0, 
   261/11, -22, 265/11, 259/11, 0, 259/11}
(*  {2, 14, 5, 5, 4, 4, 11, 0, 19, 4, 17, 7, 0, 7}  *)

Listability with the operator form requires Through:

ratMod[{13, 26}]@ {256/11, 258/11, 263/11, 263/11, -22, -22, 251/11, 0,
    261/11, -22, 265/11, 259/11, 0, 259/11} // Through
(*
  {{2,  1, 5, 5, 4, 4, 11, 0,  6, 4,  4, 7, 0, 7},
   {2, 14, 5, 5, 4, 4, 11, 0, 19, 4, 17, 7, 0, 7}}
*)
$\endgroup$
3
$\begingroup$

I guess what Mod[a/b, c] means is that there is an integer z such that Mod[b*z,c] is equal to Mod[a, c]. Assuming this, consider the first fraction 256/11. You can find the integer z using

FindInstance[Mod[11*z, 26] == Mod[256, 26], z, Integers]
{{z -> 2}}

You can also replace FindInstance by Solve or by Reduce. You can turn this into a function straightforwardly and apply it to your list l:

frac[q_] := First@FindInstance[
    Mod[Denominator[q]*z, 26] == Mod[Numerator[q], 26], z, Integers];
sol = frac[#] & /@ l;
z /. sol

{2, 14, 5, 5, 4, 4, 11, 0, 19, 4, 17, 7, 0, 7}
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.