0

私はこの質問を理解しようとしています。

primeset入力が正の整数 n で、出力が p が n を割るすべての素数 p の集合である手続き を書きます。

これまでに次のことを試しました。こちらはメイプルを使用。

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 などのいくつかの数字で実行しようとしましたが、得られたのは false、false、false だけでした。

誰かがいくつかの提案を提供できれば、それは素晴らしいことです。

4

2 に答える 2

1

Maple にはifactor(n)、素因数のリストを出力する のような組み込みの因数分解コマンドがあり、これを使用してリストを作成できます。@MRAB によって提案されたアプローチも非常に一般的で、考えられるすべての素因数を反復し、n に素因数が含まれているかどうかを確認します。

于 2012-09-10T22:56:43.743 に答える
1

ここにいくつかのヒントがあります:

nは、素因数のリストの積です。

最小の要因 を検索しp >= 2ます。

残りの因数の積はn / pであるため、繰り返し、 の最小の素因数を検索しますn / p

因数は繰り返される可能性があるため、次に見つける因数は最後の因数以上になることに注意してください。

最後に、数値の最大因数はその数値の平方根を超えることはできません。

于 2012-09-09T18:38:23.820 に答える