判断素数 一个数的约数 一个整数的幂次约分
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 }