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 }