原题目见这里,因为是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;
}
}