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