0

させて

n=2^10 3^7 5^4...31^2...59^2 61...97

素数の累乗が増加しないような整数の因数分解になります。

Mathematica でコードを書き、n の素因数の Min と Max が同じ累乗になるようにしたいと思います。たとえば、r(べき乗) を取り、一般に素数 (最大 2 つ) を与える関数が必要です。上記のサンプルに対する具体的な回答は次のとおりです。

minwithpower[7]=3

maxwithpower[7]=3


minwithpower[2]=31

maxwithpower[2]=59

任意のアイデアをお願いします。

4

2 に答える 2

2

それでは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 からの出力で 1 回だけ発生する場合、このアプローチは失敗することに注意してください。たとえば、

Cases[FactorInteger[n], {_, 7}] /. {{min_, _}, ___, {max_, _}} -> {min, max}

戻り値

{{3, 7}}

しかし、その欠点は非常に簡単に修正できるはずです。

于 2012-10-04T14:01:15.417 に答える
0

1つの解決策は次のとおりです。

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} *)
于 2012-10-04T14:01:11.937 に答える