美文网首页
C++ 递归方法求一个数的质数因子

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

作者: 863cda997e42 | 来源:发表于2018-02-13 16:21 被阅读341次

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

    #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是素数!
    

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

    相关文章

      网友评论

          本文标题:C++ 递归方法求一个数的质数因子

          本文链接:https://www.haomeiwen.com/subject/vhgjtftx.html