I have a function G[x,y,z,r,s,t]
in the code below. Quite simply, I want to generate a list of all possible tuples $(x,y,z,r,s,t)$ such that all six entries are taken from the set $\{0,1,2,...,N-1\}$ where $N$ will be an integer parameter of the problem. I then want to evaluate $G$ on each of these tuples and as efficiently as I can, count the number of the tuples which evaluate to 0 modulo $N$. I at least have the following:
G[x_, y_, z_, r_, s_, t_] :=
x*y*z*(r^3 + s^3 + t^3) - r*s*t*(x^3 + y^3 + z^3);
F[N_] := Range[0, N - 1];
Tup[N_] := Tuples[F[N], 6];
So Tup[N]
is a list of all my tuples of interest. I was about to do a "for loop" ranging over the number of tuples and evaluate something like
G[Tup[2][[4]][[1]], Tup[2][[4]][[2]], Tup[2][[4]][[3]],
Tup[2][[4]][[4]], Tup[2][[4]][[5]], Tup[2][[4]][[6]]]
for example, but this seems to be extremely inefficient. I'm sure there must be a smarter way! So given my G[x,y,z,r,s,t]
as well as Tup[N]
how can I construct a function P[N]
which will output the number of tuples which evaluate to 0 modulo $N$?
G @@@ Tup[10];
orG @@ Transpose[Tup[10]];
. The latter should be faster but may not always work. $\endgroup$