質數因子 功能:輸入一個正整數,按照從小到大的順序輸出它的所有質數的因子(如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++; } }}新聞熱點
疑難解答