#include <iostream>
#include <vector>
using namespace std;
struct item
{
int p;
int e;
};
bool isPrime(int n)
{
if (n % 2 == 0)
return false;
for (int i = 3; i * i < n; ++i)
{
if (n % i == 0)
return false;
}
return true;
}
int main()
{
vector<int> Prime({ 2 });
for (int i = 3; i < 20000; ++i)
if (isPrime(i))
Prime.push_back(i);
int t;
cin >> t;
while (t--)
{
int a;
cin >> a;
vector<item> vec;
for (auto beg = Prime.begin(); beg != Prime.end(); beg++)
{
if (a % *beg == 0)
{
int cnt = 0;
while (a % *beg == 0)
{
++cnt;
a /= *beg;
}
vec.push_back({ *beg,cnt });
}
else if (a == *beg)
{
vec.push_back({ a, 1 });
break;
}
}
for (const auto &i : vec)
cout << '(' << i.p << "," << i.e << ')';
cout << endl;
}
return 0;
}
其实不用这么麻烦,比较符合Python风格的思路应该是所有质因数生成列表1,再通过集合为中介去重然后排序保存为列表2,最后用自带的count函数得到列表2内每个元素在列表1中出现的次数
现在最符合Python风格的思路是调用
collections.Counter
了(我不确定两年前有没有这个东西可用for example:
最快速度是kangaroo 0.284