Home » List Interprime Numbers

List Interprime Numbers

List the Interprime Numbers. An Interprime number is the average of two consecutive odd prime numbers. Ex. 60 which is average of 59 and 61. Note – Picture carries some answers which are wrong as pointed by few. Excel file carries right values.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 352
Challenge Difficulty: ⭐️⭐️⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of List Interprime Numbers with Power Query

Power Query solution 1 for List Interprime Numbers, proposed by John V.:
let
 S = Excel.CurrentWorkbook(){0}[Content],
 P = (x) => List.AllTrue(List.Transform( {1..Int64.From(Number.Sqrt(x))}, each Number.Mod(x, 1 + _) > 0)),
 D = (n) => if P(n) then n else @D(n - 2),
 C = Table.AddColumn(S, "C", each
 [n = [Number],
 d = P(2 * n - D(n - 1 - Number.From(Number.IsOdd(n))))][d]),
 R = Table.SelectRows(C, each [C])[[Number]]
in
 R

Blessings!


                    
                  
          
Power Query solution 2 for List Interprime Numbers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Tabla1"]}[Content], 
  Sol = Table.SelectRows(
    Source, 
    each 
      let
        a = [Number], 
        b = List.Transform(
          {1, - 1}, 
          (k) =>
            List.Last(
              List.Generate(
                () => [x = 0, y = 0, z = 0], 
                each [z] < 1, 
                each [
                  x = [x] + 1, 
                  y = List.AllTrue(
                    List.Transform(
                      {2 .. Int64.From(Number.Sqrt(a + [x] * k))}, 
                      (r) => Number.Mod(a + [x] * k, r) <> 0
                    )
                  ), 
                  z = if y then [z] + 1 else [z], 
                  w = a + x * k
                ], 
                each [w]
              )
            )
        ), 
        c = a = List.Average(b)
      in
        c
  )
in
  Sol
Power Query solution 3 for List Interprime Numbers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = Table.SelectRows(
    Source, 
    each 
      let
        a = [Number], 
        b = List.RemoveNulls(
          List.Skip(
            List.Generate(
              () => [x = 0, y = 0, z = 0], 
              each [z] <= 1, 
              each [
                x = [x] + 1, 
                y = List.AllTrue(
                  List.Transform(
                    {2 .. Int64.From(Number.Sqrt(a + x))}, 
                    (y) => Number.Mod(a + x, y) <> 0
                  )
                ), 
                z = if y then [z] + 1 else [z], 
                w = if y then a + x else null
              ], 
              each [w]
            )
          )
        ){0}, 
        c = List.RemoveNulls(
          List.Skip(
            List.Generate(
              () => [x = 0, y = 0, z = 0], 
              each [z] <= 1, 
              each [
                x = [x] + 1, 
                y = List.AllTrue(
                  List.Transform(
                    {2 .. Int64.From(Number.Sqrt(a - x))}, 
                    (y) => Number.Mod(a - x, y) <> 0
                  )
                ), 
                z = if y then [z] + 1 else [z], 
                w = if y then a - x else null
              ], 
              each [w]
            )
          )
        ){0}, 
        d = a = (b + c) / 2
      in
        d
  )
in
  Sol
Power Query solution 4 for List Interprime Numbers, proposed by Rafael González B.:
let
 Source = Excel.CurrentWorkbook{0}[Content],
 Fn_Interprime = (Nu as number) => 
 let 
 Fn_IsOddPrime = (n as number) => 
 let
 N = n,
 Ch = Number.IsOdd(N),
 Pr = if Ch then
 let
 A = {2.. Number.RoundDown(Number.Sqrt(N))},
 B = List.Transform(A, each Number.Mod(N,_)),
 C = not List.Contains(B, 0)
 in 
 C else false,
 Select = Ch and Pr
 in
 Select,
 Num1 = List.Last(List.Generate(
 () => [N = Nu, C = false],
 each [C] = false,
 each [
 N = [N] + 1,
 C = Fn_IsOddPrime([N])
 ],
 each [N] + 2
 )),
 Num2 = List.Last(List.Generate(
 () => [N = Nu, C = false],
 each [C] = false,
 each [
 N = [N] - 1,
 C = Fn_IsOddPrime([N])
 ],
 each [N] - 2
 )) 
 in
 List.Average({Num1, Num2}),
 Anw = Table.SelectRows(Source, each [Number] = Fn_Interprime([Number]))
in 
 Anw

🧙‍♂️🧙‍♂️🧙‍♂️


                    
                  
          

Solving the challenge of List Interprime Numbers with Excel

Excel solution 1 for List Interprime Numbers, proposed by Bo Rydobon 🇹🇭:
=TOCOL(MAP(A2:A10,
    LAMBDA(x,
    LET(P,
    LAMBDA(
        n,
        LET(
            c,
            {2,
            3,
            5,
            7},
            d,
            n/TOCOL(
                VSTACK(
                    c,
                    SEQUENCE(
                        n^0.5/6,
                        ,
                        2
                    )*6+{-1,
                    1}
                ),
                3
            ),
            IF(
                OR(
                    n=c
                ),
                1,
                AND(
                    d>INT(
                        d
                    )
                )
            )
        )
    ),
    
nP,
    LAMBDA(
        R,
        n,
        d,
        LET(
            m,
            n+d,
            ip,
            IF(
                ISODD(
                    m
                ),
                P(
                    m
                )
            ),
            IF(
                ip,
                m,
                R(
                    R,
                    m,
                    d
                )
            )
        )
    ),
    
x/(nP(
    nP,
    x,
    1
)+nP(
    nP,
    x,
    -1
)=2*x)))),
    3)
Excel solution 2 for List Interprime Numbers, proposed by John V.:
=TOCOL(
    MAP(
        A2:A10,
        LAMBDA(
            x,
            LET(
                p,
                LAMBDA(
                    n,
                    AND(
                        MOD(
                            n,
                            1+SEQUENCE(
                                n^0.5
                            )
                        )
                    )
                ),
                r,
                LAMBDA(
                    r,
                    n,
                    IF(
                        p(
                            n
                        ),
                        n,
                        r(
                            r,
                            n-2
                        )
                    )
                ),
                x/p(
                    2*x-r(
                        r,
                        x-ISODD(
                            x
                        )-1
                    )
                )
            )
        )
    ),
    2
)
Excel solution 3 for List Interprime Numbers, proposed by John V.:
=TOCOL(MAP(A2:A10,
    LAMBDA(n,
    LET(p,
    TOCOL(
        MAP(
            n-150+2*ROW(
                1:150
            )-ISEVEN(
                n
            ),
            LAMBDA(
                x,
                x/AND(
                    MOD(
                        x,
                        1+SEQUENCE(
                            x^0.5
                        )
                    )
                )
            )
        ),
        2
    ),
    n/(n=AVERAGE(
        XLOOKUP(
            n,
            p,
            p,
            ,
            {-1;1}
        )
    ))))),
    2)
Excel solution 4 for List Interprime Numbers, proposed by محمد حلمي:
=TOCOL(MAP(A2:A10,
    LAMBDA(w,
    
LET(v,
    SEQUENCE(
        15
    ),
    r,
    LAMBDA(
        s,
        XMATCH(
            0,
            -MAP(
                w+s,
                LAMBDA(
                    a,
                    LET(
                        e,
                        a/SEQUENCE(
                            a^0.5,
                            ,
                            2
                        ),
                        
                        OR(
                            INT(
                                e
                            )=e
                        )
                    )
                )
            )
        )
    ),
    w*IF((w>3)*(w<>5),
    r(
        v
    )=r(
        -v
    ))^0))),
    2)
Excel solution 5 for List Interprime Numbers, proposed by Julian Poeltl:
=LET(
    F,
    IFERROR(
        MAP(
            A2:A10,
            LAMBDA(
                N,
                LET(
                    NN,
                    N-SEQUENCE(
                        1,
                        250
                    ),
                    IPO,
                    IFERROR(
                        MAP(
                            NN,
                            LAMBDA(
                                A,
                                L_ISPrimeNumber(
                                    A
                                )
                            )
                        ),
                        ""
                    ),
                    F,
                    FILTER(
                        TRANSPOSE(
                            NN
                        ),
                        TRANSPOSE(
                            IPO
                        )=TRUE
                    ),
                    D,
                    N-TAKE(
                        F,
                        1
                    ),
                    IPT,
                    MAP(
                        N+D,
                        LAMBDA(
                                A,
                                L_ISPrimeNumber(
                                    A
                                )
                            )
                    ),
                    IPC,
                    IFERROR(
                        IPT,
                        FALSE
                    ),
                    FILTER(
                        N,
                        IPC=TRUE
                    )
                )
            )
        ),
        ""
    ),
    FILTER(
        F,
        F<>""
    )
)
 
 L_ISPrimeNumber:
=LAMBDA(
    Number,
    IF(
        SUM(
            IF(
                MOD(
                    Number,
                    SEQUENCE(
                        1,
                        Number
                    )
                )=0,
                1,
                0
            )
        )=2,
        TRUE,
        FALSE
    )
)
Excel solution 6 for List Interprime Numbers, proposed by Timothée BLIOT:
=FILTER(A2:A10,
    MAP(A2:A10,
    LAMBDA(z,
    LET(D,
    LAMBDA(n,
    IF(n<5,
    2,
    VSTACK(2,
    SEQUENCE(ROUNDDOWN(((n^0.5)-3),
    0)/2+1,
    ,
    3,
    2)))),
    P,
    LAMBDA(x,
    LET(A,
    D(
        x
    ),
    SWITCH(x,
    1,
    0,
    2,
    1,
    --(SUM(MAP(A,
    LAMBDA(a,
    --(MOD(
        x,
        a
    )=0))))=0)))),
    A,
     TOCOL(
         MAP(
             SEQUENCE(
                 MIN(
                     z,
                     2*10^4
                 ),
                 ,
                 MAX(
                     INT(
                         z/2
                     ),
                     z-10^4
                 )
             ),
             LAMBDA(
                 x,
                  IF(
                      P(
        x
    ),
                      x,
                      1/0
                  )
             )
         ),
         3
     ),
    ((MAX(
        FILTER(
            A,
            A-z<0
        )
    )+MIN(
        FILTER(
            A,
            A-z>0
        )
    ))/2)=z))))
Excel solution 7 for List Interprime Numbers, proposed by LEONARD OCHEA 🇷🇴:
=LET(
    G,
    LAMBDA(
        x,
        y,
        z,
        AND(
            MOD(
                x+y*z,
                SEQUENCE(
                    x^0.5-1,
                    ,
                    2
                )
            )
        )
    ),
    TOCOL(
        MAP(
            A2:A10,
            LAMBDA(
                a,
                LET(
                    F,
                    LAMBDA(
                        F,
                        u,
                        LET(
                            s,
                            G(
                                a,
                                u,
                                -1
                            )+G(
                                a,
                                u,
                                1
                            ),
                            IF(
                                s=0,
                                F(
                                    F,
                                    u+1
                                ),
                                IF(
                                    s=2,
                                    a,
                                    q
                                )
                            )
                        )
                    ),
                    F(
                        F,
                        1
                    )
                )
            )
        ),
        3
    )
)
Excel solution 8 for List Interprime Numbers, proposed by Abdelrahman Omer, MBA, PMP:
=TOCOL(MAP(A2:A10,
    LAMBDA(a,
    LET(k,
    a+HSTACK(
        SEQUENCE(
            30
        ),
        -SEQUENCE(
            30
        )
    ),
    f,
    LAMBDA(b,
    --IF(b=2,
    TRUE,
    PRODUCT(--(MOD(
        b,
        SEQUENCE(
            ROUNDDOWN(
                SQRT(
                    b
                ),
                
            ),
            ,
            ROUNDUP(
                SQRT(
                    b
                ),
                
            ),
            -1
        )
    )<>0))=1)),
    n,
    MAP(
        k,
        LAMBDA(
            x,
            f(
                x
            )
        )
    ),
    a/(SUM(
        TAKE(
            FILTER(
                n,
                INDEX(
                    n,
                    ,
                    1
                )+INDEX(
                    n,
                    ,
                    2
                )>0
            ),
            1
        )
    )=2)))),
    2)
Excel solution 9 for List Interprime Numbers, proposed by Diarmuid Early:
=FILTER(
    A2:A10,
    MAP(
        A2:A10,
        LAMBDA(
            input,
            LET(
                
                 sq,
                SEQUENCE(
                    250,
                    ,
                    input-249,
                    2
                ),
                
                 possP,
                SEQUENCE(
                    SQRT(
                        input+250
                    )/2,
                    ,
                    3,
                    2
                ),
                
                 stack,
                VSTACK(
                    possP,
                    sq
                ),
                
                 primes,
                REDUCE(
                    stack,
                    possP,
                    LAMBDA(
                        a,
                        v,
                        
                         IF(
                             ISNUMBER(
                                 XMATCH(
                                     v,
                                     a
                                 )
                             ),
                             
                              FILTER(
                                  a,
                                  MOD(
                                      a,
                                      v
                                  )<>0
                              ),
                             
                              a
                         )
                    )
                ),
                
                 nearest,
                XLOOKUP(
                    input,
                    primes,
                    primes,
                    ,
                    {-1,
                    1}
                ),
      &          
                 AVERAGE(
                     nearest
                 )
            )=input
        )
    )
)

Solving the challenge of List Interprime Numbers with Python in Excel

Python in Excel solution 1 for List Interprime Numbers, proposed by John V.:
Hi everyone!
One [Python] option could be:
[i for i in xl("A2:A10")[0] if i == (p(i) + n(i)) / 2]
Blessings!
                    
                  

Solving the challenge of List Interprime Numbers with R

R solution 1 for List Interprime Numbers, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
library(numbers)
input = read_excel("Excel/352 Interprime Numbers.xlsx", range = "A1:A10") %>% janitor::clean_names()
test = read_excel("Excel/352 Interprime Numbers.xlsx", range = "B1:B6") %>% janitor::clean_names()
is_interprime <- function(n) {
 if (!is.integer(n)) {
 return(FALSE)
 }
 prev_prime <- previousPrime(n)
 next_prime <- nextPrime(n)
 
 return(n == (prev_prime + next_prime) / 2)
}
# version with own functions (we are gonna use only isPrime from numbers package) 
next_prime = function(n) {
 repeat { 
 n = n + 1
 if (isPrime(n)) {
 return(n)
 }
 }
}
previous_prime = function(n) {
 while (n > 2) {
 n = n - 1
 if (isPrime(n)) {
 return(n)
 }
 }
}
is_interprime_2 <- function(n) {
 if (!is.integer(n)) {
 return(FALSE)
 }
 prev_prime <- previous_prime(n)
 next_prime <- next_prime(n)
 
 return(n == (prev_prime + next_prime) / 2)
}
result = input %>%
 mutate(number = as.integer(number)) %>%
 mutate(is_interprime = map_lgl(number, is_interprime),
 is_interprime_2 = map_lgl(number, is_interprime_2)) %>%
 filter(is_interprime) %>%
 bind_cols(test)
                    
                  

&&

Leave a Reply