【发布时间】:2019-10-22 11:12:38
【问题描述】:
我想使用 Maxima 来获得随机正整数的素数分解,例如12=2^2*3^1。
到目前为止我所尝试的:
a:random(20);
aa:abs(a);
fa:ifactors(aa);
ka:length(fa);
ta:1;
pfza: for i:1 while i<=ka do ta:ta*(fa[i][1])^(fa[i][2]);
ta;
这将作为学生在线练习的一部分在 Moodle 的 STACK 中实现,因此确切的实现会与此略有不同,但我将其分解为这 7 行。
我生成一个随机数a,使用aa=|a|+1确保它是一个正整数,并想使用ifactors命令得到aa的素数。 ka 告诉我成对不同的素数因子的数量,然后我将其用于 pfza 中的 while 循环。如果我让这段代码运行,它会返回一切正常,除了用于简化 ta 的 execpt,也就是说,我不会将 ta 视为具有某些指数的素数的乘积,而只是 ta=aa。
然后我尝试关闭简化器,手动简化我需要的所有其他内容:
simp:false$
a:random(20);
aa:ev(abs(a),simp);
fa:ifactors(aa);
ka:ev(length(fa),simp);
ta:1;
pfza: for i:1 while i<=ka do ta:ta*(fa[i][1])^(fa[i][2]);
ta;
然而这并不能编译;我认为问题出在 pfza 的某个地方,但我不知道为什么。
关于如何解决这个问题的任何意见?或者以非简化形式获得分解的另一种方法?
【问题讨论】:
标签: maxima