华为机试——质数因子
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 状态:答案正确
相关文章推荐