原题目见这里,因为是pdf文件,所以就不拷贝过来了。
思路:对于输入的每个n,可以根据素数拆分的原理,n可等于k(k>=1)个素因数的m(m>=1)次幂的乘积,而其中的最大幂就是答案了。
代码:
#include<iostream>
#include<string.h>
using namespace std;
int pri[1000001];
int p[1000001];
int cnt;
void init()//先找出1000000以内的素数
{
memset(pri,0,sizeof(pri));
pri[2]=0;//若i是素数 则pri[i]=0
cnt=0;
for(int i=2;i<=1000;i++)
{
if(!pri[i])
{
p[cnt++]=i;
}
else continue;
for(int j=i;j*i<1000001;j++)
{
pri[i*j]=1;
}
}
}
int f(int n)//找出最大幂
{
int max_freq=1,cnt0;
for(int i=0;i<cnt;i++)
{
if(n<p[i]) break;
cnt0=0;
while(n%p[i]==0)
{
cnt0++;
if(cnt0>max_freq) max_freq=cnt0;
n/=p[i];
}
}
return max_freq;
}
int main()
{
int t,n;
cin>>t;
init();
while(t--)
{
cin>>n;
cout<<f(n)<<endl;
}
}
本文介绍了一种通过素数分解来寻找整数n的最大幂的方法,并提供了完整的C++实现代码。该方法首先预处理出1000000以内的所有素数,然后对输入的每个n进行素数分解,找到构成n的最大幂。
4105

被折叠的 条评论
为什么被折叠?



