1

ある整数 n の因子として存在する最大の階乗数を見つけるアルゴリズムの設計に取り組んでいます。この問題は RGDormey の「コンピュータで解決する方法」に記載されています。アルゴリズムの設計方法について教えてください..答えは整数nの因数であり、階乗数でなければなりません..

私が考えた解決策:

最初に整数が素数でないことを確認してください。プライムの場合、それ以上の解決策はありません..

素数でない場合、整数の最大因数を見つけます

階乗数かどうかを調べます..

はいの場合、それが答えです

そうでない場合は、整数の 2 番目に大きい因数を見つけます。

階乗であるかどうかを確認します...

等々..

4

5 に答える 5

4

Nを1で割り、次に結果を2で割り、次に結果を3で割り、次にk+1で割ります。k + 1の整数結果がなくなると、k!答えです。

于 2011-07-04T13:56:12.013 に答える
2

あなたはあなたの整数に入る最大の階乗を見つけようとしているので、あなたはただ着実にあなたの階乗を増やす必要があります。つまり、結果の整数が2、3、4などで割り切れるかどうかを確認します。初めて失敗したときは、大きな階乗が整数を除算しないことがわかります。たとえば、整数が2 ... 6で割り切れるが、7で割り切れない場合、答えは6!です。

于 2011-07-04T13:56:03.730 に答える
0

階乗が非常に大きく非常に速く成長するという特性を考えると、私はそれを直接分割してみたくなるでしょう。最初にあなたの数よりも小さい最大の階乗を見つけます...次に、たとえば次のように割ってチェックを開始します。Nをあなたの数とします。階乗f(fac、num)を、数値よりも小さい階乗を返す階乗関数とします。そのようなnum!= fac次に、次の手順を実行します。

(N%fac)==0かどうかを確認します。else try(N * num)%fac then(N *(num)*(num-1))%fac

uが必要とする答えは、最初のケースでは(num)、2番目のケースでは(num-1)というようになります。

于 2011-07-04T14:05:34.750 に答える
0
long prod = 1;
long maxFactor = 1;

for(long i=2; i<=n && prod< n && n%i==0 ;i++){

    prod  = prod*i;
    if(n%prod == 0) maxFactor = prod;
}

これは、最大の階乗因子を見つける必要がある数であり、 macFactornの最終的な値が最終的な解です。

注:数の因数の因数は、数の因数でもあります。

因子が階乗値の場合、1 から始まる連続した整数の積でなければなりません (つまり、それ自体以外の因子の積でなければなりません)。

于 2014-04-14T15:12:28.500 に答える