美文网首页
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++ 递归方法求一个数的质数因子

    输入一个正整数,如果不是素数,求该正整数的质数因子。使用递归算法实现。 结果如下: 注意:输入的正整数不能超过最大值。

  • 求质数因子

    题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )最后一...

  • 牛客网Wannafly挑战赛25 A题

    题目大意 题目链接给你n,p两个数,求n的阶乘中p做为因子出现的个数 分析 如果p为质数的话,很容易求出p出现的次...

  • 一、语句部分习题(上)

    典例1: 求一个数是不是质数 方法1:建立一个布尔值变量,来表示这个数是不是质数,将这个数从自身到1,一直与大于1...

  • 求因子个数

    求因子个数主要用到了 约数个数定理。即个数为数字的 素因子 幂加一 的 积。 在此仅贴出一题 UVA10375。题...

  • 判断质数的方式

    1. 给定一个数 num,求[0, num]内的质数 思路 如果一个数是非质数,那么它的n被也一定是非质数

  • C++ 求质数

    生成前 n 个素数,n 由用户提供,并保存到文件

  • 【js】小作业质数运算

    1.求100以内的质数 for(vari=2;i<=100;i++){ ///看看i是不是质数,拿出一个数一直除到...

  • Java 的递归函数

    通过求一个数的阶乘来说明递归函数

  • 二叉树的遍历(先序、中序、后序)

    树结构: 先序:递归:C++: 非递归:C++: 中序:递归:C++: 非递归:C++: 后序:递归:C++: 非...

网友评论

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

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