题目描述:
题目大意:找出具有最大素数因子的整数。如果有不止一个,则输出在输入文件中出现最早的一个。
解题思路:刚开始时,p数组中的元素全为0,刚开始对于素数 i,p[i]=0,用一个for循环,将是素数 i 的倍数的数 的在数组p中的值全部赋值为 i;
如:第一轮:2为素数,p[2]=0,p[4]=2,p[6]=2,p[8]=2......p[2*n]=2;
第二轮:3为素数, p[3]=0,p[6]=3,p[9]=3,p[12]=3......p[3*n]=3;
第...轮:i为素数,p[i]=0,p[i+n*i]=i;
再如下列测试案例中 m=38时,在第一轮中,2为素数,38是2的倍数,所以p[38]=2;在第18轮(即i=19)时,19为素数,而38是19的倍数,所以p[38]更新为19
代码实现:
#include<stdio.h>
#include<iostream>
const int MAX=;
int p[MAX];
using namespace std;
int main()
{
int n,s,m,maxn;
int i,j;
p[]=;
for(i=;i<MAX;i++)
{
if(p[i]==)
for(j=i;j<MAX;j+=i)//这一段代码不断实现对p数组进行更新
p[j]=i;
}
while(~scanf("%d",&n))
{
maxn=-;
while(n--)
{ scanf("%d",&m);
if(p[m]>maxn)
{
maxn=p[m];
s=m;
}
}
printf("%d\n",s);
}
return ;
}