C++ 递归方法求一个数的质数因子

2018-02-13  本文已影响341人  863cda997e42

输入一个正整数,如果不是素数,求该正整数的质数因子。使用递归算法实现。

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

bool isPrime(int n)
{
    if (n < 2)
    {
        return false;
    }
    if (n == 2)
    {
        return true;
    }
    
    for (int i = 2; i < n; i++)
    {
        if (n % i == 0){
            return false;
        }
    }
    return true;
}

void primeFactor(int n, vector<int> &ob)
{
    if (isPrime(n))
    {
        ob.push_back(n);
    } 
    else
    {
        for (int i = 2; i < n; i++)
        {
            if (n % i == 0)
            {
                ob.push_back(i);
                primeFactor(n / i, ob);
                break;
            }
        }
    }
}

void printPrime(int m, int n)
{
    cout << m << "到" << n << "之间的素数:" << endl;
    for (int i = m; i < n; i++)
    {
        if (isPrime(i))
        {
            cout << i << "\t";
        }
    }
    cout << endl << endl;
}

void test()
{
    int n;
    cout << "请输入正整数:";
    cin >> n;
    cout << endl;

    if (n == 1)
    {
        cout << "1既不是素数也不是合数!" << endl << endl;
        return;
    } 
    if (isPrime(n))
    {
        cout << n << "是素数!" << endl << endl;
        return;
    }

    vector<int> result;
    primeFactor(n, result);
    sort(result.begin(), result.end());
    cout << n << " = ";
    for (int i = 0; i < result.size(); i++)
    {
        if (i == result.size() - 1)
        {
            cout << result[i] << endl;
        }
        else
        {
            cout << result[i] << " * ";
        }
    }
    cout << endl;
}

int main()
{
    printPrime(1, 100);
    int count = 12;
    while (true)
    {
        count--;
        test();
        if (count <= 0)
        {
            break;
        }
    }
    return 0;
}

结果如下:

1到100之间的素数:
2       3       5       7       11      13      17      19      23      29
31      37      41      43      47      53      59      61      67      71
73      79      83      89      97

请输入正整数:100

100 = 2 * 2 * 5 * 5

请输入正整数:1024

1024 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2

请输入正整数:789

789 = 3 * 263

请输入正整数:12345

12345 = 3 * 5 * 823

请输入正整数:666666

666666 = 2 * 3 * 3 * 7 * 11 * 13 * 37

请输入正整数:97

97是素数!

注意:输入的正整数不能超过最大值。

上一篇下一篇

猜你喜欢

热点阅读