首页 > 学院 > 开发设计 > 正文

华为OJ:质数因子

2019-11-08 02:17:52
字体:
来源:转载
供稿:网友

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

详细描述:

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

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

输入例子: 180

输出例子: 2 2 3 3 5

解答1(个人版)【时间复杂度有点高,属于暴力求解】:#include <iostream>#include <vector>#include <math.h>using namespace std;bool judge(int n){ int i; if(n==1||n==0) return false; for(i=2; i<(int)sqrt((double)n); ++i) { if(n%i==0) return false; } return true;}int main(){ int n,i,j; vector<int>v; vector<int>s; while(cin>>n) { v.clear(); s.clear(); for(i=2; i<=n; ++i) { if(judge(i)) s.push_back(i); } int k=0; int n_save; n_save = n; for(k=0; k<s.size()&&n_save; ++k) { while(n_save%s[k]==0) { v.push_back(s[k]); n_save/=s[k]; } //++k; } //sort int temp; for(i=0; i<v.size(); ++i) { for(j=i+1; j<v.size()-i-1; ++j) { if(v[j]>v[j+1]) { temp = v[j]; v[j] = v[j+1]; v[j+1] = temp; } } } for(i=0; i<v.size(); ++i) { cout<<v[i]<<" "; } cout<<endl; } return 0;}解法2:#include <iostream>#include <math.h>using namespace std;int main(){ long num; while(cin>>num){ for (int i = 2;i <= num;){ if (num % i == 0){ cout<<i<<" "; num /= i; i = 2; } else i++; } } return 0;}解法3:#include<iostream>using namespace std;int main(){ long data = 0; while(cin >> data) { int i = 2; while(data != 1) { if(data % i == 0) { data /= i; cout << i <<' '; } else i++; } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表