login
Numbers that can be represented as a sum of two distinct nontrivial prime powers (numbers of the form p^k where p is a prime number and k >= 2).
8

%I #11 Feb 21 2017 20:16:33

%S 12,13,17,20,24,25,29,31,33,34,35,36,40,41,43,48,52,53,57,58,59,65,68,

%T 72,73,74,76,80,81,85,89,90,91,96,97,106,108,113,125,129,130,132,133,

%U 134,136,137,141,144,145,146,148,150,152,153,155,157,160,170,173,174,177

%N Numbers that can be represented as a sum of two distinct nontrivial prime powers (numbers of the form p^k where p is a prime number and k >= 2).

%C Indices of positive terms in A225099.

%C Nontrivial prime powers are A025475 except the first term A025475(1) = 1.

%H Robert Israel, <a href="/A225102/b225102.txt">Table of n, a(n) for n = 1..10000</a>

%p N:= 1000: # to get all terms <= N

%p P:= select(isprime, [2,seq(i,i=3..floor(sqrt(N)),2)]):

%p PP:= sort(map(p -> seq(p^t,t=2..floor(log[p](N))), P)):

%p sort(convert(select(`<=`,{seq(seq(PP[i]+PP[j],j=1..i-1),i=1..nops(PP))},N),list)); # _Robert Israel_, Feb 21 2017

%t nn = 177; p = Sort[Flatten[Table[Prime[n]^i, {n, PrimePi[Sqrt[nn]]}, {i, 2, Log[Prime[n], nn]}]]]; Select[Union[Flatten[Table[p[[i]] + p[[j]], {i, Length[p] - 1}, {j, i + 1, Length[p]}]]], # <= nn &] (* _T. D. Noe_, Apr 29 2013 *)

%o (C)

%o #include <stdio.h>

%o #include <stdlib.h>

%o #define TOP (1ULL<<17)

%o unsigned long long *powers, pwFlat[TOP], primes[TOP] = {2};

%o int main() {

%o unsigned long long a, c, i, j, k, n, p, r, pp = 1, pfp = 0;

%o powers = (unsigned long long*)malloc(TOP * TOP/8);

%o memset(powers, 0, TOP * TOP/8);

%o for (a = 3; a < TOP; a += 2) {

%o for (p = 0; p < pp; ++p) if (a % primes[p] == 0) break;

%o if (p == pp) primes[pp++] = a;

%o }

%o for (k = i = 0; i < pp; ++i)

%o for (j = primes[i]*primes[i]; j < TOP*TOP; j *= primes[i])

%o powers[j/64] |= 1ULL << (j & 63), ++k;

%o if (k > TOP) exit(1);

%o for (n = 0; n < TOP * TOP; ++n)

%o if (powers[n/64] & (1ULL << (n & 63))) pwFlat[pfp++] = n;

%o for (n = 0; n < TOP * TOP; ++n) {

%o for (c = i = 0; pwFlat[i] * 2 < n; ++i)

%o r=n-pwFlat[i], c+= (powers[r/64] & (1ULL <<(r&63))) > 0;

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

%o }

%o return 0;

%o }

%Y Cf. A025475, A225099.

%K nonn

%O 1,1

%A _Alex Ratushnyak_, Apr 28 2013