判断素数 一个数的约数 一个整数的幂次约分

 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 } 

 

posted @ 2018-04-23 21:47  奋斗の小白  阅读(304)  评论(0编辑  收藏  举报