-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;

对于[i = 1, i <= k, i++,

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

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

mep1=最大[B];

mep1

结果是

{2,3,5,7,11}

11

我想编写代码而不是 B 来获得 B[n],因为我需要为给定的 n 绘制 mep1[n] 的图形。

4

1 回答 1

1

如果我正确理解您的问题和代码,您需要整数的素数列表,n但只有该列表的初始部分与所有素数列表的初始部分匹配。

我将首先观察到您发布的内容看起来更像 C 或其亲属之一,而不像Mathematica。事实上,您似乎根本没有使用过Mathematica内置函数的任何功能。如果您想真正使用Mathematica,您需要开始熟悉这些功能;如果这对 C 及其同类语言没有吸引力,那么它是一种相当有用的编程语言。

我要采取的第一步是获得这样的主要因素n

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

查看文档以了解FactorInteger返回的详细信息;在这里,我使用转置和部分来仅获取主要因子列表并删除它们的系数。你可能没有注意到Part函数的使用,双方括号是常用的符号。另请注意,我在这台机器上没有Mathematica,所以我的语法可能有点错误。

接下来,您只需要那些listOfFactors与所有素数列表中的相应元素匹配的元素。分两步执行此操作。首先,获取从 1 到k两个列表匹配的整数:

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

接着

listOfFactors[[matches]]

我会把它留给你:

  • 将这些片段组装成你想要的功能;
  • 纠正我所犯的语法错误;和
  • 弄清楚每个(子)表达式中到底发生了什么。

我不保证这种方法在任何一般意义上都是最好的方法,但它比您自己的第一次尝试更好地利用了Mathematica 的 内在功能,并且我希望,它会指引您在未来更好地使用该系统。

于 2012-09-24T13:26:25.490 回答