这里有个性质:n中最多只含有一个大于sqrt(n)的因子。证明通过反证法:如果有两个大于sqrt(n)的因子,那么相乘会大于n,矛盾。证毕
于是我们发现最多只有一个大于sqrt(n)的因子,对其进行优化。先考虑比sqrt(n)小的,代码和质数的判定类似
最后如果n还是>1,说明这就是大于sqrt(n)的唯一质因子,输出即可。
时间复杂度:O(sqrt(N)))!
代码:
#include <bits/stdc++.h>
using namespace std;
int n,t,s;
void f(int x)
{
for(int i = 2;i <= x / i;i++)
if(x % i == 0)
{
s = 0;
while(x % i == 0)
{
x /= i;
s++;
}
cout<<i<<" "<<s<<endl;
}
if(x > 1) cout<<x<<" 1"<<endl;
puts("");
}
int main()
{
cin>>n;
while(n--)
{
cin>>t;
f(t);
}
return 0;
}
如果这篇文章对您有帮助的话,请记得点赞收藏加关注吖(●'◡'●)