Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Peculiar behaviour of Mathematica code

  • To: mathgroup at smc.vnet.net
  • Subject: [mg57964] Re: Peculiar behaviour of Mathematica code
  • From: "Carl K. Woll" <carlw at u.washington.edu>
  • Date: Tue, 14 Jun 2005 05:10:29 -0400 (EDT)
  • Organization: University of Washington
  • References: <d8jlau$srs$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

"Tony King" <mathstutoring at ntlworld.com> wrote in message 
news:d8jlau$srs$1 at smc.vnet.net...
>I have some Mathematica code which I borrowed from the Divisors package.
> This code should return True if its argument is semiperfect and False if 
> it
> is not.
>
> Here is the code
>
> SemiperfectQ[n_Integer?Positive]:=Module[{d=Most[Divisors[n]]},
>
>    n==Plus@@#&/@(Or@@Rest[Subsets[d]])
>
> ]
>
> This seems to work fine if the argument is composite. However, if the 
> input
> is prime it returns {False} rather than False.
>

Here is a different approach which is generally faster:

SemiperfectQ[n_Integer?Positive] :=
Block[{x}, Coefficient[Expand[Times @@ (1 + x^Most[Divisors[n]])], x^n] > 0]

Both approaches essentially compute the power set of the divisors, and so 
the time grows exponentially with the number of divisors. If you are 
interested in numbers with a lot of divisors, you may wish to investigate 
algorithms which don't compute the power set (e.g. backtracking).

> Similarly the code for returning True if a number is weird behaves in the
> same way
>
> WeirdQ[n_Integer?Positive]:=DivisorSigma[1,n]>2n&&
>
>            n!=Plus@@#&/@(And@@Rest[Subsets[Most[Divisors[n]]]])
>
> Any ideas how these codes could be modified to return False (rather than
> {False}) for prime inputs
>

Once you have SemiperfectQ working, then it's simple:

WeirdQ[n_Integer?Positive]:=DivisorSigma[1,n]>2n && !SemiperfectQ[n]

> Thank you
>
> Tony
>

Carl Woll
Wolfram Research 



  • Prev by Date: Re: Q: Thread behaviour
  • Next by Date: Re: Exporting mathematica equations into MathType
  • Previous by thread: Peculiar behaviour of Mathematica code
  • Next by thread: Re: Peculiar behaviour of Mathematica code