# [seqfan] Re: Numbers that are the sum of x nonzero y-th powers

David Corneth davidacorneth at gmail.com
Thu Aug 13 10:20:52 CEST 2020

```As far as I can see the editing of these sequences is done. Thanks for the
help!

Thanks for the code above Maximilian! I didn't know things like printf work
here.
It must be me but I tried using
fmt(r)=strprintf("%s A%06d (%d, %d)", if(r[1]>404,",","Cf."),r[1],r[2],r[3])
ref=concat([ fmr(r)  | r <- v ])

and got an error. What should r be? Like the list I put? I tried changing
fmr to fmt but that didn't help. Do you have an example initializing r? The
others work :)

Best,
David

On Tue, Aug 4, 2020 at 9:32 AM M. F. Hasler <oeis at hasler.fr> wrote:

> On Tue, Aug 4, 2020 at 5:13 AM David Corneth <davidacorneth at gmail.com>
> wrote:
>
>> To make xrefs, in any format desired probably, I'll list the sequences in
>> a
>> (PARI) vector format in order of appearance in OEIS (including 3386 now
>> and
>> 3325 fixed) here:  [[404, 2, 2], [3325, 2, 3], (...)
>
>
> nice database !
> The order "first by # of terms, then by power" leads to contiguous ranges
> which can be abbreviated with " - " or better "..",
> but since the powers are only m = 2 .. 11 while  number of terms are k =
> 2..12
> the former will more easily go in one row without line break.
> Specifically, a table with 10 columns will have width = 10*(7+1) = 80
> characters if the A-numbers are separated with just a space (which was the
> format used in the old index, although using ", " is nicer).
>
> xrefline(v) = {
>> res = "Cf. ";  (...)
>>
>
> This seems to be for use in the sequences. I'd suggest to give the full
> list only in the index, a
> nd  just some "entry points" here (xref sections in the main OEIS):
> For example, in the sequence for (k,m) one could give
>  the range of the (other) sequences with the same k,
>  and the list of the other sequences with the same m.
> This reduces the size from "10 x 11" to 2 + 10, and still includes all
> info at one glance and allows quick and efficient "navigation".
>
>
>> res = concat([res, Anumber(v[i][1]), " (", v[i][2], ", ", v[i][3], "),
>> "]);
>>
>
> Instead of concat(), the dedicated functions for strings are Str() and/or
> strprintf(),
> e.g., res=Str(res,strprintf(", A%06d (%d, %d)", v[i][1] , v[i][2] ,
> v[i][3] ))
>
> However, concat() is useful to avoid multiple consecutive string
> operations and do it all in one step, viz:
>
> fmt(r)=strprintf("%s A%06d (%d, %d)",
> if(r[1]>404,",","Cf."),r[1],r[2],r[3])
> ref=concat([ fmr(r)  | r <- v ])
>
> /* or amend "ref" to select from v[]  the A-numbers with same k or m: */
> ref(k,m)=concat([ fmr(r)  | r <- v, (r[2]==k)-(r[3]==m) ])
>
> Anumber(n) = {res = "A"; for(i = #digits(n) + 1, 6, res = concat(res,
>> 0);); return(concat(res, n))}
>>
>
> as seen above, that's just printf("A%06d", n), so a function isn't really
> needed.
>
> - Maximilian
>

```