#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
int main()
{
int n = 0;
cin >> n;
long long s = 1;
bool flag = false;
bool Exchange = false;
long long i = 2;
for (int i = 1;i <= n;i++)
{
s = s * i;
}//计算阶乘
int j = 1;
int a[MAXN];
for (int i = 1;i <= MAXN;i++)
{
a[i] = 0;
}
while (i <= s)
{
flag = true;
for (int u = 2;u < i;u++)
{
if (i % u == 0)
{
flag = false;
}
}
if (s % i == 0 && flag == true)
{
s = s / i;
a[j] = i;
j++;
}
if (s % i != 0)
{
i++;
}
}//找出该数的所有质因子
int o = 0;
int b[MAXN];
int c[MAXN];
int h = 1;
for (int i = 0;i <= j;i++)
{
if (a[i - 1] != a[i])
{
if (i != 1)
{
// cout << a[i - 1] << ' ' << o << endl;
b[h] = a[i - 1];
c[h] = o;
h++;
}
o = 1;
}
if (a[i - 1] == a[i])
{
o++;
}
}//寻找p(存在b[]),计算a(存在c[])
for (int i = 1;i <= h - 1;i++)
{
Exchange = false;
for (int j = n - 1;j >= i;j--)
{
if (b[j] < b[j + 1])
{
c[0] = c[j + 1];
c[j + 1] = c[j];
c[j] = c[0];
b[0] = b[j + 1];
b[j + 1] = b[j];
b[j] = b[0];
Exchange = true;
}
}
if (Exchange == false)
{
break;
}
}/*按题目要求相反的将p从大到小排序
也不是我不想从小到大
但是 (b[j] < b[j + 1])改成(b[j] > b[j + 1])
就会输出一堆'0'*/
for (int i = h - 1;i >= 1;i--)
{
cout << b[i] << ' ' << c[i] << endl;
}//再倒序输出
return 0;
}
我也不知道问题在哪......
求助大佬。
另外......
我确实很弱,别喷我......