-1

させて

2 | n、3 | n、...、p_i | n、p_ j | n、...、p_k | n

p_i <p_ j <... <p_k

ここで、p_iまでのすべての素数はnを除算します

j> i + 1

Mathematicaでp_iを見つけて{2,3,5、...、p_i}を決定するコードを書きたい。

ありがとう。

B = {};

n = 2 ^ 6 * 3 ^ 8 * 5 ^ 3 * 7 ^ 2 * 11 * 23 * 29;

For [i = 1、i <= k、i ++、

If [Mod [n、Prime [i]] == 0、AppendTo [B、Prime [i]]

If [Mod [n、Prime [i + 1]]> 0、Break []]]];

mep1 = Max [B];

B

mep1

結果は

{2,3,5,7,11}

11

与えられたnに対してmep1[n]のグラフを描く必要があるので、B[n]を取得するためにBの代わりにコードを書きたいと思います。

4

1 に答える 1

1

あなたの質問とコードを正しく理解していれば、整数の素因数のリストが必要ですがn、すべての素数のリストの最初の部分と一致するそのリストの最初の部分のみが必要です。

最初に、あなたが投稿したものがMathematicaよりも C またはその親戚の 1 つに似ていることに気付きます。実際、 Mathematica の組み込み関数の機能をまったく使用していないようです。Mathematicaを実際に使いたい場合は、これらの関数に慣れる必要があります。それがCとその同類に固執することに魅力的でない場合、それはかなり便利なプログラミング言語です.

n私が取る最初のステップは、次のような素因数を取得することです。

listOfFactors = Transpose[FactorInteger[n]][[1]]

FactorInteger返されるものの詳細については、ドキュメントを参照してください。ここでは、転置と部分を使用して、素因数のリストのみを取得し、それらの係数を削除しています。関数の使用に気付かないかもしれませんがPart、二重の角括弧は通常の表記です。また、このマシンにはMathematicaがインストールされていないため、構文が少し間違っている可能性があることに注意してください。

listOfFactors次に、すべての素数のリスト内の対応する要素と一致する要素のみが必要です。これを 2 つの手順で行います。kまず、 2 つのリストが一致する1 から整数を取得します。

matches = TakeWhile[Range[Length[listOfFactors]],(listOfFactors[[#]]==Prime[#])&]

その後

listOfFactors[[matches]]

私はあなたに任せます:

  • これらのフラグメントを必要な機能に組み立てます。
  • 私が犯した構文エラーを修正します。と
  • 各(サブ)式で何が起こっているかを正確に把握しました。

このアプローチが一般的な意味で最良のアプローチであるという保証はありませんが、Mathematica の 固有の機能を最初に試した場合よりもはるかに有効に活用でき、将来的にシステムをより適切に使用できるようになることを願っています.

于 2012-09-24T13:26:25.490 に答える