Re: [math-fun] Discrete logs of composite numbers
Damn! "phi" below should be "lambda": At 04:46 AM 12/28/2019, Henry Baker wrote:
I've been playing around with arithmetic mod a composite number, and I needed to extend discrete logs to the entire set -- not just those elements representable as g^i for some primitive root g.
Consider, for example, Zn, for n = p*q = 47*59 = 2773. We also need phi(n) = lcm(p-1,q-1) = 46*58/2 = 1334.
Sould be: lambda(n) = lcm(p-1,q-1) = 46*58/2 = 1334.
So we have 1334 elements in the multiplicative group.
We also have another 1334 *negatives* of this group.
We also have 58 powers of 47, and 46 powers of 59.
Counting them up, we have
1334 1334 58 46 ---- 2772
non-zero elements of Zn.
I.e., p*q = (p-1)*(q-1)+(p-1)+(q-1)+1
We can represent these elements as a quad*:
[s,i,j,k]
which represents the product
(-1)^s * 47^i * (-59)^j * 2^k
because "2" happens to be a generator/primitive root for the multiplicative group.
(* Different composite n's may require more than 4 elements.)
(We use -59 instead of 59 because -59 generates the full subgroup, while +59 only generates half of the subgroup.)
Note also that we will never see i>0 and j>0 at the same time, because 47*59 = n = 0 (mod n).
So we now define the discrete log of m in Zn to be
log(m) = log((-1)^s*47^i*(-59)^j*2^k) = [s,i,j,k]
Also,
exp([s,i,j,k]) = (-1)^s*47^i*(-59)^j*2^k (mod n)
So we can now do multiplications via logs:
m1*m2 = exp(log(m1)+log(m2))
where "+" is element-wise addition.
I'm certain that others have done this same thing before, but I don't recall seeing this representation.
participants (1)
-
Henry Baker