让
n=2^10 3^7 5^4...31^2...59^2 61...97
是一个整数的因式分解,使得素数的幂是不增加的。
我想在 Mathematica 中编写一个代码来找到 n 的素数因子的最小值和最大值,以使它们具有相同的功率。例如,我想要一个函数,它通常采用 r(幂)并给出(最多两个)素数。上述示例的具体答案是
minwithpower[7]=3
最大功率[7]=3
minwithpower[2]=31
最大功率[2]=59
请有任何想法。
让
n=2^10 3^7 5^4...31^2...59^2 61...97
是一个整数的因式分解,使得素数的幂是不增加的。
我想在 Mathematica 中编写一个代码来找到 n 的素数因子的最小值和最大值,以使它们具有相同的功率。例如,我想要一个函数,它通常采用 r(幂)并给出(最多两个)素数。上述示例的具体答案是
minwithpower[7]=3
最大功率[7]=3
minwithpower[2]=31
最大功率[2]=59
请有任何想法。
n = 91065388654697452410240000
那么让
FactorInteger[n]
返回
{{2, 10}, {3, 7}, {5, 4}, {7, 4}, {31, 2}, {37, 2}, {59, 2}, {61, 1}, {97, 1}}
和表达式
Cases[FactorInteger[n], {_, 2}]
仅返回系数为 的因子和系数列表中的那些元素2
,即
{{31, 2}, {37, 2}, {59, 2}}
接下来是表达式
Cases[FactorInteger[n], {_, 2}] /. {{min_, _}, ___, {max_, _}} -> {min, max}
返回
{31, 59}
请注意,如果您感兴趣的幂仅在 FactorInteger 的输出中出现一次,则此方法将失败,例如
Cases[FactorInteger[n], {_, 7}] /. {{min_, _}, ___, {max_, _}} -> {min, max}
返回
{{3, 7}}
但是你应该能够很容易地解决这个缺陷。
一种解决方案是:
getSamePower[exp_, n_] := With[{powers =
Select[ReleaseHold[n /. {Times -> List, Power[a_, b_] -> {a, b}}], #[[2]] ==
exp &]},
If[Length[powers] == 1, {powers[[1, 1]], powers[[1, 1]]}, {Min[powers[[All, 1]]], Max[powers[[All, 1]]]}]]
用作:
getSamePower[7, 2^10 3^7 5^4 \[Pi]^1 31^2 E^1 59^2 61^1 I^1 97^1 // HoldForm]
(* {3, 3} *)
getSamePower[2, 2^10 3^7 5^4 \[Pi]^1 31^2 E^1 59^2 61^1 I^1 97^1 // HoldForm]
(* {31, 59} *)