您的位置:首页 > 其它

华为机试——质数因子

2017-07-23 16:13 211 查看

题目描述

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

最后一个数后面也要有空格

输入描述:

输入一个long型整数

输出描述:

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

示例1

输入

180


输出

2 2 3 3 5


思路:这题的接口是java的,直接不用,输出正确就可以了,i从2开始遍历,到ulDataInput,如果ulDataInput能整除i,更新ulDataInput和i,将这个因子加在res结果中 ,再加上空格;不能整除直接++i。如果i和ulDataInput相等了,证明ulDataInput本身就是质数,直接将这个因子加到res中,再加上空格。这里的更新ulDataInput 一定程度上降低了复杂度,但是肯定还有更优解,二刷的时候再想~

代码:

#include <iostream>
#include <string>

using namespace std;

int main(){
long ulDataInput;
cin >> ulDataInput;
string res;
for (int i = 2; i<ulDataInput;){//i从2开始遍历,到ulDataInput
if (ulDataInput%i == 0){//如果ulDataInput能整除i
ulDataInput /= i;//更新ulDataInput
res += to_string(i) + " ";//将这个因子加在res结果中 ,再加上空格
i = 2;//更新i为2
}
else{//如果不能整除,则++i
++i;
}
if (i==ulDataInput){//如果i和ulDataInput相等了,证明ulDataInput本身就是质数
res += to_string(ulDataInput)+ " ";//直接将这个因子加到res中,再加上空格
}
}

cout << res << endl;
return 0;
}


输出结果: 运行时间: 2 ms 占用内存:220K 状态:答案正确
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: