【华为机试】6-质数因子

1- Description

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )最后一个数后面也要有空格

详细描述:
函数接口说明:public String getResult(long ulDataInput)
输入参数:long ulDataInput:输入的正整数
返回值:String

输入描述
输入一个long型整数。
输出描述
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1
输入:
180
输出:
2 2 3 5

2- Solution

  • 下面给出一种常规的解法
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
vector<int> vecPrime;
int main(){
    unsigned long inputnum = 0;
    while(cin >> inputnum){
        int i = 2;
        while(inputnum != 1){
            if(i < sqrt(inputnum) + 1){
                if(inputnum % i == 0){
                    vecPrime.push_back(i);
                    inputnum /= i;
                }else{
                    i++;
                }
            }else{//说明只能是本身了!
                vecPrime.push_back(inputnum);
                break;
            }
        }
        for(int i = 0; i < vecPrime.size(); ++i){
            cout<< vecPrime[i] <<" ";
        }
    }
    return 0;
}
  • 下面解法很简洁:每找到一个因数,一直除到余数为0,找到的一定是质数
using namespace std;
int main()
{
    unsigned long inputnum;
    while(cin>>inputnum)
    {
        for(int i = 2;i <= inputnum;i++)
        {
            while(inputnum % i==0)
            {
                cout<< i <<' ';
                inputnum /= i;
            }
        }
    }
}

欢迎关注公众号:CodeLab

猜你喜欢

转载自blog.csdn.net/pyuxing/article/details/88848202