0

N =(p 1 a(p 2 b ..... *(p n z)のように数値Nを分割するのに役立つアルゴリズムを探しています。

どこ

N is the given number
p is prime numbers smallest to greatest
a,b,..z are the power over the prime
* is the multiplication operation
4

3 に答える 3

5

それは因数分解と呼ばれます。グーグルへのキーワード:prime factorization algorithm

問題は、これを本当に速く行うことがまだできないということです。これは、暗号化(RSAアルゴリズムなど)の非常に優れた基盤になります。

幸運を!

于 2012-10-24T10:44:37.617 に答える
1

時間の最適化を気にしないのであれば、それほど複雑な問題ではありません。以下は、機能する簡単なコードです。

#include<iostream>
#include<vector>
#include<map>
#include<cmath>

using namespace std;

int get_primes(int max_number, vector<int> &primes)
{
    int *table = new int[max_number + 1];

    memset(table, -1, sizeof(int) * (max_number + 1));

    table[0] = table[1] = 0;

    primes.clear();

    for(int i = 2;i<=max_number ;i++)
    {
        if(table[i])
        {
            primes.push_back(i);
            for(int j = i * i;j<=max_number;j+=i)
            {
                table[j] = 0;
            }
        }
    }

    delete [] table;
    return primes.size();
}

int get_prime_factor(int number, map<int , int> &factors)
{
    vector<int> primes;
    get_primes(number,primes);

    factors.clear(); 
    int ret = 0;
    for(int i = 0;primes[i] <= number;)
    {
        if(number % primes[i] == 0)
        {
            ret ++;
            factors[primes[i]] ++;
            number /= primes[i];
        }
        else
            i++;
    } 
    return ret;
}

int main()
{
    cout<<"Please input a number:"<<endl;
    int number;

    cin>>number;

     map<int , int> factors;
     get_prime_factor(number,factors);


    for(map<int,int>::iterator itr= factors.begin();itr != factors.end();++itr)
    {
            cout<<"("<<itr->first<<"**"<<itr->second<<")";
    }

    cout<<endl;
    getchar();
    getchar();
    return 0;

}

それが役に立てば幸い!

于 2012-10-24T11:40:00.327 に答える
1

整数を因数分解するためのアルゴリズムはたくさんあります。試行除算、ポラードのローアルゴリズム、楕円曲線、二次ふるい法などです。それらのトピックのいくつかをグーグルで検索すると役立ちます。はじめに、試行除算による因数分解のアルゴリズムは次のとおりです。

function td_factors(n)
    f = 2
    while f * f <= n
        if n % f == 0
            output f
            n /= f
        else
            f = f + 1
    output n

さらに読むために、私はブログのエッセイを控えめに勧めます。

于 2012-10-24T12:49:28.973 に答える