login
Numbers of triples {x, y, z} such that z >= y > 0 and triangular(x) + triangular(y) * triangular(z) = 2^n.
2

%I #12 May 13 2013 18:50:09

%S 1,1,2,0,4,0,5,1,7,0,4,0,18,0,2,0,17,0,16,0,15,0,9,0,39,0,9,0,61,0,10,

%T 3,27,0,18,0,56,0,8,0,80,0,48,1,41,0,12,0,118,1,10,0,90,0,30,2,24,0,24

%N Numbers of triples {x, y, z} such that z >= y > 0 and triangular(x) + triangular(y) * triangular(z) = 2^n.

%e {0, 1, 1} is the only triple producing 2^0, so a(0) = 1.

%e {1, 1, 3} and {3, 1, 1} are the triples producing 2^2, so a(2) = 2.

%o (C)

%o #include <stdio.h>

%o #include <math.h>

%o typedef unsigned long long U64;

%o U64 isTriangular(U64 a) { // ! Must be a <= (1<<63)

%o U64 s = sqrt(a*2);

%o if (a>=(1ULL<<63)) {

%o if (a==(1ULL<<63)) return 0;

%o printf("Error: a = %llu\n", a), exit(1);

%o }

%o return (s*(s+1)/2 == a);

%o }

%o int main() {

%o U64 c, n, x, tx, y, ty, z, prod;

%o for (n = 1; n>0 && n <= (1ULL<<63); n+=n) {

%o for (c = 0, x = tx = 0; tx <= n; ++x, tx+=x)

%o for (z=prod=n-tx, y=ty=1; ty<=z; ++y, ty+=y, z=prod/ty)

%o if ((z * ty == prod) && isTriangular(z)) c++;

%o printf("%llu, ", c);

%o }

%o return 0;

%o }

%Y Cf. A000217, A224928, A225536.

%K nonn,hard,more

%O 0,3

%A _Alex Ratushnyak_, May 08 2013