Wolfram mathematica 用Mathematica求所有第一个连续的素因子并求其最大值

Wolfram mathematica 用Mathematica求所有第一个连续的素因子并求其最大值,wolfram-mathematica,prime-factoring,Wolfram Mathematica,Prime Factoring,让 2 | n,3 | n,…,p|i | n,p|j | n,…,p|k | n p_i

2 | n,3 | n,…,p|i | n,p|j | n,…,p|k | n

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,i0,Break[]]

mep1=最大值[B]

B

mep1

结果是

{2,3,5,7,11}

十一,


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

如果我正确理解了你的问题和代码,你想要一个整数的素数因子列表,但只需要该列表的初始部分,它与所有素数列表的初始部分相匹配

首先,我会注意到你发布的内容看起来更像C或它的一个亲戚,而不是Mathematica。事实上,您似乎根本没有使用Mathematica内置函数的任何功能。如果你想真正使用Mathematica,你需要开始熟悉这些函数;如果这不符合C及其类似语言的要求,那么它是一种相当有用的编程语言

我要做的第一步是得到
n
的素因子,如下所示:

listOfFactors = Transpose[FactorInteger[n]][[1]]
查看文档,了解
factorynteger
返回的内容的详细信息;在这里,我使用换位和部分来得到素因子列表,并去掉它们的系数。您可能没有注意到
部分
函数的使用,双方括号是常用的表示法。还要注意的是,我在这台机器上没有Mathematica,所以我的语法可能有点错误

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

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

listOfFactors[[matches]]
我将把它留给您:

  • 将这些片段组合成所需的函数
  • 纠正我犯的语法错误;及
  • 弄清楚每个(子)表达式中到底发生了什么

我不保证这种方法在任何一般意义上都是最好的方法,但它比您自己的第一次尝试更好地利用Mathematica的固有功能,我希望,它将为您今后更好地使用该系统指明方向。

您迄今为止尝试了什么?你有写代码的欲望是很好的,但即使是比Mathematic先进得多的系统也与我们的欲望相抗争,它们对程序的反应更好。向我们展示您所做的工作,我们可能会提供帮助。@高性能标记:我添加了代码,但我的代码在绘制图形时是固定的,我希望B是n的函数,如果n有一个特殊的规则。如果你能使用
FactorInteger
,你为什么要写这样的函数呢?它保证更快,测试更好?@nikie,FactorInteger给出了所有的因子,但我只需要从2到p_i的第一个连续的素因子,p_{i+1}不是该数字的一个因子。执行第二个命令时,它将给出空集。我写了下面的代码,但需要很长时间。B[n_]:=表[If[Mod[n,Prime[i+1]>0,Prime[i],Prime[n]/2],{i,1,n}];谢谢。如何将其作为n的函数。如果您在将我提供的代码片段组装成函数时遇到困难,您应该(重新)阅读Mathematica文档,也许可以从定义函数的教程开始。