基础编程题之因数分解

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础编程题之因数分解相关的知识,希望对你有一定的参考价值。

题目1

牛客在这里插入图片描述

解题思路

首先对于求素数,因数分解这类的题目,搜索范围一般是[2,sqrt(a)]
因为数学中:假设a合数,并且a == b * c,其中bc中必定有一个 ≤ sqrt(a),不可能出现bc同时大于a

对于这一题,还有一点要注意的是,当我们把a的所有2因数都分解出来后,2的倍数(4、6、8…)都不可能再分解出来,比如100分解出2 x 2后,无法再分出2的倍数,同样分解出所有3因数后,则无法再分出3的倍数…

因此我们可以:[2, sqrt(a)]区间从小到大逐渐试探的时候,碰到一个分解的因数时a,就一直分解a,直到不能再分解a,此时也不可能再分解出a的倍数。

代码

// write your code here cpp
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int input;
    while(cin >> input)
    {
        printf("%d = ",input);
        for(int i=2 ;i<=sqrt(input);i++)
        {
            while((input % i == 0))
            {
                if(input/i==1)//最后一个数字,特殊输出
                {
                    break;
                }
                printf("%d * ",i);
                input/=i;
            }
        }
        printf("%d\\n",input);
    }
    return 0;
}

在这里插入图片描述

题目2

牛客在这里插入图片描述

解题思路

这个题和上一题基本一致,只不过上一题要写出完整的表示形式,而这一题需要输出不重复的因子的个数,代码中只需要稍微修改一部分。先判断是否是因子,如果是使用while循环处理能被这个因子整除的情况

代码

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    int input;
    while(cin >> input)
    {
        int number=0;
        for(int i=2 ;i<=sqrt(input);i++)
        {
            if(input % i == 0)
                number++;
            while(input % i == 0)//就像36,不要有重复的因子
                input/=i;
        }
        if(input > 1)//如果不等于1,说明还有一个因子
            number++;
        cout<<number<<endl;
    }
    return 0;
}

在这里插入图片描述

以上是关于基础编程题之因数分解的主要内容,如果未能解决你的问题,请参考以下文章

java 分解质因数 基础增强

python基础练习题(题目 将一个整数分解质因数。例如:输入90,打印出90=2*3*3*5)

基础练习 分解质因数

java--编程(分解质因数)

c语言程序编程(分解质因数)

VC++编程题 编程实现对大于1的整数进行质因数分解,并求出其和