Further info.  I did solve the problem (Euler Project no 592).

It needed the cumulative product of 2^23 odd numbers , 1 3 5 ...33554431, modulo 2^48

This verb works,  but is pretty slow on my laptop,  taking 5 to 6 minutes:

cumoddprod =: 3 : 0
1 cumoddprod y
:
'lo hi' =. y
nc =. lo (>:@<.@-:@-~) hi
o  =. nc#0 NB. simple (64-bit) integer output
cur=. x:x NB. extended current value, which might be initialised to non-unity
in =. lo      NB. simple integer input
for_i. i.nc do.
o =. (x:inv cur =. cur ((M&|@*) x:) in) i } o NB. multiply extended, NB. save as integer
   in  =. 2 + in
end.
o
)
Small example:
   4 8$64 | cumoddprod 1 63
 1  3 15 41 49 27 31 17
33 51 47 57 17 11 63 33
 1 35 15  9 49 59 31 49
33 19 47 25 17 43 63  1

It's prohibitive, as far as memory is concerned to store the whole array as extended,
so I allow extended arithmetic on the two operands only.

I wouldn't need to use extended multiplication if multiply of <63-bit integers modulo
M< ~ 2^63 was guaranteed correct!   Too much to ask?

Any better ways to achieve the result of cumoddprod?

Thanks,

Mike



On 08/05/2017 15:08, 'Mike Day' via Programming wrote:
Yes, I did have a look, especially as one approach to the problem I was examining was to construct a set of coefficients modulo M based on polynomial multiplication.

eg
(1 + ax)(1 + bx)(a+cx) .... = 1 + (a+b+c+...)x + (ab + bc + ca + ...)x^2 + ...
for which we should be able to use
add =: M&|@+
by =: M&|@*
ppr  =:  add//.@(by/)    NB. adapted from the Wiki essay
with
ppr/ 1,. a,b,c,...
but it looked to me as if I'd have to invoke the fft multiplier in scalar fashion.
I'm happy to be proved wrong.

But I'm probably on the wrong tack for the problem as a whole!

Thanks, Raul
Mike

On 08/05/2017 14:19, Raul Miller wrote:
On Mon, May 8, 2017 at 4:43 AM, 'Mike Day' via Programming
<[email protected]> wrote:
Is there a better way to do modulus multiply with largish arguments?
Hypothetically speaking, you might be able to do something based on
http://code.jsoftware.com/wiki/Essays/FFT

I hope this helps,



---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to