Re: Re: Number-Theory :: All-Digit Perfect Squares
- To: mathgroup at smc.vnet.net
- Subject: [mg64285] Re: Re: [mg64264] Number-Theory :: All-Digit Perfect Squares
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Thu, 9 Feb 2006 02:45:00 -0500 (EST)
- Reply-to: hanlonr at cox.net
- Sender: owner-wri-mathgroup at wolfram.com
Here is a much faster selection test (Union vice multiple MemberQ): test[x_]:=And@@(MemberQ[IntegerDigits[x],#]&/@Range[9]); Timing[sel1=Select[Range[11111,31427]^2,test[#]&];] {5.90577 Second,Null} Timing[sel2=Select[Range[11111,31427]^2,Union[IntegerDigits[#]]==Range [9]&];] {0.671642 Second,Null} sel1==sel2 True Bob Hanlon > > From: Bob Hanlon <hanlonr at cox.net> To: mathgroup at smc.vnet.net > Subject: [mg64285] Re: [mg64264] Number-Theory :: All-Digit Perfect Squares > > test[x_]:=And@@(MemberQ[IntegerDigits[x],#]&/@Range[9]); > > Select[Range[11111,31427]^2,test[#]&] > > > Bob Hanlon > > > > > From: bd satish <bdsatish at gmail.com> To: mathgroup at smc.vnet.net > > Subject: [mg64285] [mg64264] Number-Theory :: All-Digit Perfect Squares > > > > Hi buddies, > > > > > > I set out to write a code that generates nine-digit > > perfect square numbers , with each of the digits 1,2,3,...9 occuring only > once > > in a given number. An example is 139854276 = 11826^2 . Obviuously , > all > > such numbers must lie in the interval [123456789 , 987654321] . Since > > 11111^2 < 123456789 and 31427^2 > 987654321 , all the square > numbers must > > have their square-roots > > in the interval (11111,31427) . > > > > I need suggetions from you guys to help me improve the code or > > to make it better or > > shorter. > > > > The logic I used is this: > > > > (a). Generate all the squares of integers in the range [11111,31427] > > > > (b). Seperate the numbers into digits (using the command IntegerDigits[ ] > > ) > > > > (c). Check , how many (or which and all) numbers in this list have each > > of the digits 1,2,3,...8,9 exactly once. > > > > (d). Collect all those lists and put them back as numbers (using the > > command FromDigits[ ] ) > > > > > > Here is the actual code: > > > > squares = IntegerDigits[Table[i ^ 2 , { i,11111,31427}]]; > > sel = { } ; (* empty-list*) > > Do[ > > p = squares[[k]]; > > logic = > > And[MemberQ[p,1],MemberQ[p,2],MemberQ[p,3],MemberQ[p, 4],MemberQ > [p,5],MemberQ[p,6], > > MemberQ[p,7],MemberQ[p,8],MemberQ[p,9] ] ; > > > > If[TrueQ[logic] , sel = Append[sel,p]] , > > {k,1,Length[squares]} > > ]; > > Map[FromDigits,sel,{1}] > > > > The code does work perfectly, giving a list of 30 such numbers. > > > > Will anyone help to to improve the code , if possible ? > > > > I would like to get rid of MemberQ[..] repeated so often. > > > > > > >