0

我试图弄清楚这个问题。

编写一个过程 ,primeset其输入是一个正整数 n,其输出是所有素数 p 的集合,使得 p 除以 n。

到目前为止,我已经尝试过以下方法。这是使用枫木。

primeset:=proc

 # Determine if n is divisble by p:

          local p;
          for p from 1 to n do
           if isprime(p) then # check divisibility by primes
            if modp(n,p) = 0 then # check if divided by prime
              return false;
             end if;
            end if;
          end do;
          return true;
          end proc;
          # VARIABLES:
          # INPUT:
          #  n is a (positive) integer
          # LOCAL:
          #  p is a (positive) integer.
          # OUTPUT:
          #  output is the set of all primes p such that p divides n.

我的输出是这样的:

primeset := proc (n) local p; for p to n do if isprime(p) then if modp(n, p) = 0 then return false end if end if end do; return true end proc.

我试着在一些数字上运行它,比如 2,4 和 10,我得到的只是假的,假的,假的。

如果有人可以提供一些建议,那就太好了。

4

2 回答 2

1

这里有一些提示:

该数字n是一系列主要因素的乘积。

寻找最小的因子p >= 2

其余因子的乘积是n / p,所以重复,寻找 的最小素因子n / p,等等。

请记住,一个因素可能会重复,因此您找到的下一个因素将 >= 最后一个因素。

最后,一个数的最大因数不能超过该数的平方根。

于 2012-09-09T18:38:23.820 回答
1

Maple 有内置的因式分解命令,如ifactor(n),它会输出一个素因数列表,你可以用它来制作你的列表。@MRAB 建议的方法也很常见,迭代所有可能的素因子并查看 n 是否包含它作为因子。

于 2012-09-10T22:56:43.743 回答