2012-10-04 51 views
0

設定以相同的功率的一些主要因素的最小和最大讓找到Mathematica中

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

是整數的因式分解,使素數的冪不增加。

我想在Mathematica中編寫代碼來查找n的素數因子的Min和Max,使它們具有相同的能力。例如 我想要一個函數,它通常需要r(冪)和給(最多兩個)素數。用於上述樣品的具體答案是

minwithpower [7] = 3

maxwithpower [7] = 3


minwithpower [2] = 31

maxwithpower [2] = 59

任何想法請。

回答

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輸出發生一次,你應該可以這種方法失敗,例如

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

回報

{{3, 7}} 

但很容易解決這個缺陷。

+0

HPM,我看到你已經在'mathematica'標籤中回答了56個問題;爲什麼不加入我們[Mathematica.SE](http://mathematica.stackexchange.com/)? –

0

一種解決方案是:

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} *) 
+0

Select :: normal:在Select [5040,#1 [[2]] == 5&]中位置1處預期的非原子表達式。 >> Select :: normal:在Select [5040,#1 [[2]] == 5&]中位置1處的非原子表達。 >> Part :: partd:Part specification選擇[5040,#1 [[2]] == 5&] [[All,1]]比對象的深度更長。 >> Part :: partd:Part specification選擇[5040,#1 [[2]] == 5&] [[All,1]]比對象的深度更長。 >> – asd

+0

@ b.gatessucks:我收到上面的錯誤 – asd

+0

@asd它適用於我; // HoldForm位很重要。 –