RosettaCodeData/Task/Wagstaff-primes/Mathematica/wagstaff-primes.math
2025-06-11 20:16:52 -04:00

40 lines
954 B
Text

wagstaffPair[p_Integer] := Module[{m},
If[Not[OddQ[p]], Return[{False, Null}]];
If[Not[PrimeQ[p]], Return[{False, Null}]];
m = Quotient[2^p + 1, 3];
If[Not[PrimeQ[m]], Return[{False, Null}]];
{True, m}
]
findNWagstaffPairs[n_Integer] := Module[{pairs = {}, count = 0, i = 2},
While[count < n,
With[{result = wagstaffPair[i]},
If[First[result],
AppendTo[pairs, {i, Last[result]}];
count++
]
];
i++
];
pairs
]
printlnWagstaff[pair_, maxDigitDisplay_: 20] := Module[{p, m, mStr, uMiddle, lMiddle},
{p, m} = pair;
mStr = ToString[m];
If[StringLength[mStr] > maxDigitDisplay,
uMiddle = Ceiling[maxDigitDisplay/2];
lMiddle = Floor[maxDigitDisplay/2];
mStr = StringJoin[{StringTake[mStr, uMiddle], "...",
StringTake[mStr, {-lMiddle}], " (", ToString[StringLength[mStr]],
" digits)"}]
];
Print["p = ", p, ", m = ", mStr]
]
Map[printlnWagstaff, findNWagstaffPairs[24]];