1. 程式人生 > >判斷素數 一個數的約數 一個整數的冪次約分

判斷素數 一個數的約數 一個整數的冪次約分

stream space esp map erase algo first sort std

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 #include<map>
 5 using namespace std;
 6 
 7 //素數測試
 8 bool is_prime(int n)
 9 {
10     for(int i=2; i*i <= n; i++)
11     {
12         if(n%i==0) return false;
13     }
14 }
15 
16 //約數枚舉
17 vector<int> divisor(int
n) 18 { 19 vector<int> res; 20 for(int i = 1; i*i <= n;i++) 21 { 22 if(n%i==0) 23 { 24 res.push_back(i); 25 if(i != n/i) res.push_back(n/i); 26 } 27 } 28 sort(res.begin(),res.end()); 29 return res; 30 } 31 32 // 整數分解 33 map<int
,int> prime_factor(int n) 34 { 35 map<int,int>res; 36 for(int i = 2; i*i <= n; i++) 37 { 38 while(n%i==0) 39 { 40 ++res[i]; 41 n/=i; 42 } 43 } 44 if(n!=1) res[n]=1; 45 return res; 46 } 47 48 int main() 49 { 50 int n;
51 cin>>n; 52 bool flag=is_prime(n); 53 vector<int> v=divisor(n); 54 map<int,int> m=prime_factor(n); 55 if(flag) cout<<"YES"<<endl; 56 else cout<<"NO"<<endl; 57 for(int i=0;i<v.size();i++) 58 { 59 cout<<v[i]<<" "; 60 } 61 cout<<endl; 62 while(!m.empty()) 63 { 64 cout<<m.begin()->first<<" "; 65 cout<<m.begin()->second<<endl; 66 m.erase(m.begin()->first); 67 } 68 }

判斷素數 一個數的約數 一個整數的冪次約分