PAT 因子個數 (模擬) - 詳細題解
阿新 • • 發佈:2018-11-19
用了set比較方便
//因子個數 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <vector> #include <queue> #include <cmath> #include <set> using namespace std; #define ms(x, n) memset(x,n,sizeof(x)); typedef long long LL; const LL maxn = 1e5+5; set<int> ans; //所有的因子 int primeNum[maxn]; bool isPrime[maxn]; void getPrime(int n) { //篩法求得n以內的所有素數並儲存在primeNum中 for(int i = 2; i <= n; i++) isPrime[i] = 1; for(int i = 2; i <= n; i++){ if(isPrime[i]) for(int j = 2; i*j <= n; j++) isPrime[i*j] = 0; } for(int i = 2, j = 1; i <= n; i++) if(isPrime[i]) primeNum[j++] = i; } void solve(int n) { //每次求得並輸出n的最小質因子 if(n == 1) return; for(int i = 1; primeNum[i] <= n; i++) if(n % primeNum[i] == 0){ n /= primeNum[i]; ans.insert(primeNum[i]); break; } solve(n); } int main() { getPrime(maxn); int n; while(cin >> n){ ans.clear(); solve(n); cout << ans.size() << endl; } return 0; }