Re: AGAIN Nested while loop!!!
- To: mathgroup at smc.vnet.net
- Subject: [mg71647] Re: AGAIN Nested while loop!!!
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Sat, 25 Nov 2006 05:37:41 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <ek63rd$907$1@smc.vnet.net>
mumat wrote:
> I have a list of numbers
>
> lst = Table[Random[Integer, {i, 50}], {i, 6}]
>
> I want to write a program that if There are two numbers x, y in A where
>
>
> Mod[x^2+y^2, 5]==0 reuturn False and the pair {x,y}, otherwise True!
>
>
> For[i = 0, i < 6, For[j = i, j < 6,
> If[Mod[lst[[i]]^2 + lst[[j]]^2, 3] == 0,
> Return[False,{i,j}]];Break[], j++], i++]
>
> While loop and nested while loops accept only one counter "i".
>
> i=1;j=2;
>
> While[i<6 && While[j<6 &&
> Mod[lst[[i]]^2+lst[[j]]^2,7]=!=0,j++];i++];{i,j}
>
> {2,6}
The following should fit your needs:
In[1]:=
lst = Table[Random[Integer, {i, 50}], {i, 6}]
Out[1]=
{33, 13, 28, 17, 15, 24}
In[2]:=
pairs = DeleteCases[Flatten[Outer[List, lst, lst], 1], {x_, x_}]
Out[2]=
{{33, 13}, {33, 28}, {33, 17}, {33, 15}, {33, 24}, {13, 33}, {13, 28},
{13, 17}, {13, 15}, {13, 24}, {28, 33}, {28, 13}, {28, 17},
{28, 15}, {28, 24}, {17, 33}, {17, 13}, {17, 28}, {17, 15}, {17, 24},
{15, 33}, {15, 13}, {15, 28}, {15, 17}, {15, 24}, {24, 33},
{24, 13}, {24, 28}, {24, 17}, {24, 15}}
In[3]:=
(If[Mod[#1[[1]]^2 + #1[[2]]^2, 5] == 0, {False, #1}, True] & ) /@ pairs
Out[3]=
{True, True, True, True, {False, {33, 24}}, True, True, True, True,
{False, {13, 24}}, True, True, True, True, {False, {28, 24}}, True,
True, True, True, {False, {17, 24}}, True, True, True, True, True,
{False, {24, 33}}, {False, {24, 13}}, {False, {24, 28}},
{False, {24, 17}}, True}
or if you are interested in the first pair only
In[4]:=
pos = Position[pairs, {x_, y_} /; Mod[x^2 + y^2, 5] == 0, 1, 1]
Out[4]=
{{5}}
In[5]:=
If[Length[pos] > 0, {False, Extract[pairs, pos][[1]]}, True]
Out[5]=
{False, {33, 24}}
Regards,
Jean-Marc