Twin primes are those 2 prime numbers where difference between them is 2. Ex. 17 & 19. Both 17 and 19 are prime numbers and difference between them is 2.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 195
Challenge Difficulty: ⭐️⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Find Twin Prime Pairs with Power Query
Power Query solution 1 for Find Twin Prime Pairs, proposed by Omid Motamedisedeh:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Prime = (x) =>
List.Sum(
List.Transform({1 .. Number.IntegerDivide(x, 2)}, each Number.From(Number.Mod(x, _) = 0))
)
= 1,
RESULT = Table.SelectRows(
Source,
each Prime(_[#"Number 1 "])
and Prime(_[#"Number 2"])
and Number.Abs(_[#"Number 1 "] - _[#"Number 2"])
= 2
)
in
RESULT
Power Query solution 2 for Find Twin Prime Pairs, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Ans = Table.SelectRows(
Source,
each
let
a = Record.ToList(_),
b = {2}
& List.Select(
List.Numbers(3, Int64.From(Number.Sqrt(List.Max(a))) / 2, 2),
each _ < List.Min(a)
)
in
if Number.Abs(a{0} - a{1}) = 2 then
List.AllTrue(
List.Transform(a, (a) => List.AllTrue(List.Transform(b, each Number.Mod(a, _) > 0)))
)
else
false
)
in
Ans
Power Query solution 3 for Find Twin Prime Pairs, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
IsPrime = (n) =>
not List.Accumulate(
{2 .. Number.RoundDown(Number.Sqrt(n))},
false,
(s, d) => s or (Number.Mod(n, d) = 0)
),
Solution = Table.SelectRows(
Source,
each IsPrime([#"Number 1 "])
and IsPrime([Number 2])
and Number.Abs([#"Number 1 "] - [Number 2])
= 2
)
in
Solution
Power Query solution 4 for Find Twin Prime Pairs, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Origen = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
SelectRows = Table.SelectRows(Origen, each Number.Abs([Number 2] - [#"Number 1 "]) = 2),
Numero1 = List.Transform(
SelectRows[#"Number 1 "],
(x) => List.Count(List.Select(List.Transform({1 .. x}, (y) => Number.Mod(x, y)), each _ = 0))
),
Numero2 = List.Transform(
SelectRows[Number 2],
(x) => List.Count(List.Select(List.Transform({1 .. x}, (y) => Number.Mod(x, y)), each _ = 0))
),
Sol = Table.SelectRows(
Table.FromColumns(
{SelectRows[#"Number 1 "], SelectRows[Number 2], Numero1, Numero2},
Table.ColumnNames(Origen) & {"Col3"} & {"Col4"}
),
each [Col3] = 2 and [Col4] = 2
)[[#"Number 1 "], [Number 2]]
in
Sol
Power Query solution 5 for Find Twin Prime Pairs, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
fil = Table.SelectRows(
Fonte,
each ([#"Number 1 "] - [Number 2] = 2) or ([#"Number 1 "] - [Number 2] = - 2)
),
add = Table.AddColumn(
fil,
"primo",
each [
a = Number.From([#"Number 1 "]),
b = List.Count(
List.Select(
List.Transform(List.Buffer({1 .. a}), (x) => a / x - Number.RoundDown(a / x)),
each _ = 0
)
),
a1 = Number.From([Number 2]),
b1 = List.Count(
List.Select(
List.Transform(List.Buffer({1 .. a1}), (x) => a1 / x - Number.RoundDown(a1 / x)),
each _ = 0
)
),
c = b = b1
][c]
),
res = Table.SelectRows(add, each ([primo] = true))[[#"Number 1 "], [Number 2]]
in
res
Power Query solution 6 for Find Twin Prime Pairs, proposed by Brian Julius:
let
Source = RawData,
FiltAbsDiff2 = Table.SelectRows(
Table.AddColumn(Source, "AbsDiff", each Number.Abs([#"Number1 "] - [Number2]), Int64.Type),
each [AbsDiff] = 2
),
RunRscript = R.Execute(
"library(primes)#(lf)df <- dataset#(lf)df$isprime1 <- is_prime(df$Number1)#(lf)df$isprime2 <- is_prime(df$Number2)#(lf)df",
[dataset = FiltAbsDiff2]
),
RResults = RunRscript{[Name = "df"]}[Value],
FilterNonPrimes = Table.SelectRows(RResults, each ([isprime2] = true)),
RemoveOther = Table.SelectColumns(FilterNonPrimes, {"Number1", "Number2"})
in
RemoveOther
Solving the challenge of Find Twin Prime Pairs with Excel
Excel solution 1 for Find Twin Prime Pairs, proposed by Bo Rydobon 🇹🇭:
=FILTER(A2:B10,BYROW(A2:B10,LAMBDA(a,AND(MOD(a,SEQUENCE((MAX(a)^0.5)/2,,3,2)),ABS(SUM(a*{-1,1}))=2))))
Excel solution 2 for Find Twin Prime Pairs, proposed by John V.:
=FILTER(A2:B10,MAP(A2:A10,B2:B10,LAMBDA(a,b,LET(p,LAMBDA(x,SUM(N(MOD(x,SEQUENCE(x^0.5))=0))),ABS(b-a)=p(b)+p(a)))))
Excel solution 3 for Find Twin Prime Pairs, proposed by محمد حلمي:
=FILTER(A2:B10,BYROW(MAP(A2:B10,LAMBDA(a,LET(r,a/SEQUENCE(SQRT(a)),SUM(--(INT(r)=r))=1))),LAMBDA(a,SUM(-a)))+ABS(A2:A10-B2:B10)=0)
Excel solution 4 for Find Twin Prime Pairs, proposed by Julian Poeltl:
=LET(N,A2:B10,FILTER(N,(ABS(TAKE(N,,1)-TAKE(N,,-1))=2)*BYROW(MAP(N,LAMBDA(A,E_ISPrimeNumber(A))),LAMBDA(A,SUM(--A)))=2))
E_ISPrimeNumber:
=LAMBDA(Number,LET(c,{2357},D,Number/TOCOL(VSTACK(c,SEQUENCE(Number^0.5/6,,2)*6+{-11}),3),OR(Number=c,AND(D-INT(D),Number>1))))
Excel solution 5 for Find Twin Prime Pairs, proposed by Timothée BLIOT:
=FILTER(A2:B10, MAP(A2:A10,B2:B10, LAMBDA(v,w, 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) ) )), P(v)*P(w)*(ABS(w-v)=2))) ))
Excel solution 6 for Find Twin Prime Pairs, proposed by Sunny Baggu:
=LET(
_e1, LAMBDA(x, y, ABS(x - y) = 2),
_e2, LAMBDA(v, OR(MOD(v, SEQUENCE(ROUNDUP(SQRT(v), 0) - 1, , 2)) = 0)),
FILTER(
A2:B10,
MAP(
A2:A10,
B2:B10,
LAMBDA(a, b,
LET(
_cond1, _e1(a, b),
_cond2, NOT(OR(_e2(a), _e2(b))),
AND(_cond1, _cond2)
)
)
)
)
)
Excel solution 7 for Find Twin Prime Pairs, proposed by Sunny Baggu:
=LET(
_list, FILTER(A2:B10, BYROW(A2:B10, LAMBDA(a, ABS(INDEX(a, , 2) - INDEX(a, , 1)) = 2))),
_num1, DROP(_list, , -1),
_num2, DROP(_list, , 1),
FILTER(
_list,
MAP(
_num1,
_num2,
SQRT(_num1),
SQRT(_num2),
LAMBDA(a, b, c, d,
LET(
_r1, OR(MOD(a, SEQUENCE(c - 1, , 2)) = 0),
_r2, OR(MOD(b, SEQUENCE(d - 1, , 2)) = 0),
NOT(OR(_r1, _r2))
)
)
)
)
)
Excel solution 8 for Find Twin Prime Pairs, proposed by Md. Zohurul Islam:
=LET(u,A2:B10,v,A1:B1,
p,MAP(u,LAMBDA(x,LET(sq,SEQUENCE(SQRT(x)),a,x/sq,SUM(ABS(ABS(INT(a)=a)=1))))),
q,FILTER(u,BYROW(p,SUM)=2),
s,ABS(BYROW(q*{-1,1},SUM)),
w,FILTER(q,s=2),
VSTACK(v,w))
Excel solution 9 for Find Twin Prime Pairs, proposed by JvdV -:
=FILTER(A2:B10,MAP(A2:A10,B2:B10,LAMBDA(a,b,AND(ISPRIME(a),ISPRIME(b),ABS(a-b)=2))))
Where ISPRIME() is a named function:
=LAMBDA(x,SUM(N(MOD(x/SEQUENCE(SQRT(x)),1)=0))=1)
Excel solution 10 for Find Twin Prime Pairs, proposed by Stevenson Yu:
=LET(A, A2:B10,
B, MAP(TAKE(A,,1), TAKE(A,,-1), LAMBDA(Q,R,
LET(
B, Q,
C, R,
D, ABS(C-B)=2,
E, MIN(MOD(B,SEQUENCE(ROUNDUP(SQRT(B),0)-1,,2)))>0,
F, MIN(MOD(C,SEQUENCE(ROUNDUP(SQRT(C),0)-1,,2)))>0,
G, D*E*F, G))),
FILTER(A, B))
Excel solution 11 for Find Twin Prime Pairs, proposed by Pratik Sathe:
=AND(ISNUMBER(A2), ISNUMBER(B2), ISPRIME(A2), ISPRIME(B2), ABS(A2-B2) =2)
Solving the challenge of Find Twin Prime Pairs with Python in Excel
Python in Excel solution 1 for Find Twin Prime Pairs, proposed by Alejandro Campos:
from sympy import isprime
twin_primes = (
xl("A1:B10", headers=True)
.query("abs(`Number 1` - `Number 2`) == 2")
.loc[lambda d: d["Number 1"].map(isprime) & d["Number 2"].map(isprime)]
.reset_index(drop=True))
&&&
