Skip to content

Instantly share code, notes, and snippets.

@butchi
Created December 5, 2018 08:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save butchi/160eb11a5a81c2d42bfa752c06026c0c to your computer and use it in GitHub Desktop.
Save butchi/160eb11a5a81c2d42bfa752c06026c0c to your computer and use it in GitHub Desktop.
素数大富豪研究のためのMathematicaユーティリティー関数 https://qiita.com/butchi_y/items/ce0fde84495c76197a49
superscript[a_, b_] := If[b == 1, a, Superscript[a, b]]
centerDot[li_] := If[Length[li] == 1, First[li], CenterDot @@ li]
j[n_] := If[PrimeQ[n], ToString[PrimePi[n]] <> "番目の素数",
centerDot[superscript @@@ FactorInteger[n]]]
divisible[check_Integer, OptionsPattern[origin -> True]] :=
Divisible[#, check] && If[OptionValue[origin], True, # != check] &
divisible[checkLi_List, OptionsPattern[origin -> True]] :=
AnyTrue[Table[divisible[check, origin -> OptionValue[origin]][#], {check, checkLi}], TrueQ] &
qkEvenQ := divisible[{2, 5}]
qkOddQ := ! qkEvenQ[#] && # != 1 &
checkQ[checkLi_,
OptionsPattern[origin -> False]] := !
AnyTrue[Table[
divisible[check, origin -> OptionValue[origin]][#], {check,
checkLi}], TrueQ] &
pass91checkQ := checkQ[{7, 13}]
pass969checkQ := checkQ[{3, 17, 19}]
pass1001checkQ := checkQ[{7, 11, 13}]
pass2001checkQ := checkQ[{3, 23, 29}]
select[li_, crit_] := Select[li, crit]
selectAllTrue[li_, critLi_List] := select[li, AllTrue[Table[crit[#], {crit, critLi}], TrueQ] &];
selectAnyTrue[li_, critLi_List] := select[li, AnyTrue[Table[crit[#], {crit, critLi}], TrueQ] &];
select[li_, critLi_List] := selectAllTrue[li, critLi]
reject[li_, crit_] := select[li, ! crit[#] &]
rejectAllTrue[li_, critLi_List] := reject[li, AllTrue[Table[crit[#], {crit, critLi}], TrueQ] &];
rejectAnyTrue[li_, critLi_List] := reject[li, AnyTrue[Table[crit[#], {crit, critLi}], TrueQ] &];
reject[li, critLi_List] := rejectAllTrue[li, critLi]
selectPrime[li_] := select[li, PrimeQ]
rejectPrime[li_] := reject[li, PrimeQ]
selectEven[li_] := select[li, EvenQ]
rejectEven[li_] := reject[li, EvenQ]
selectDivisible[li_, checkLi_List, OptionsPattern[origin -> False]] := select[li, divisible[checkLi, origin -> OptionValue[origin]]]
selectDivisible[li_, check_Integer, OptionsPattern[origin -> False]] := selectDivisible[li, {check}, origin -> OptionValue[origin]]
rejectDivisible[li_, checkLi_List, OptionsPattern[origin -> False]] := reject[li, divisible[checkLi, origin -> OptionValue[origin]]]
rejectDivisible[li_, check_Integer, OptionsPattern[origin -> False]] := rejectDivisible[li, {check}, origin -> OptionValue[origin]]
selectM3[li_] := selectDivisible[li, 3]
rejectM3[li_] := rejectDivisible[li, 3]
percent[x_] := ToString[N[100 x]] <> "%"
ratio[li_, crit_, OptionsPattern[displayStyle -> "none"]] := With[
{numerator = Length[select[li, crit]], denominator = Length[li]},
With[
{r = numerator/denominator, disp = OptionValue[displayStyle]},
Piecewise[{
{HoldForm[numerator/denominator], disp == "account"},
{N[r], disp == "numerical"},
{percent[N[r]], disp == "percent"},
{r, True}
}]
]
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment