华为OJ:质数因子
2017-02-19 19:56
246 查看
质数因子
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
最后一个数后面也要有空格
详细描述:
函数接口说明:
public String getResult(long ulDataInput)
输入参数:
long ulDataInput:输入的正整数
返回值:
String
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
输入例子:
180
输出例子:
2 2 3 3 5
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如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++; } } }