To improve the organization of his farm, Farmer John labels each of his N (1 <= N <= 5,000) cows with a distinct serial number in the range 1..20,000. Unfortunately, he is unaware that the cows interpret some serial numbers as better than others. In particular, a cow whose serial number has the highest prime factor enjoys the highest social standing among all the other cows.
(Recall that a prime number is just a number that has no divisors except for 1 and itself. The number 7 is prime while the number 6, being divisible by 2 and 3, is not).
Given a set of N (1 <= N <= 5,000) serial numbers in the range 1..20,000, determine the one that has the largest prime factor.
(Recall that a prime number is just a number that has no divisors except for 1 and itself. The number 7 is prime while the number 6, being divisible by 2 and 3, is not).
Given a set of N (1 <= N <= 5,000) serial numbers in the range 1..20,000, determine the one that has the largest prime factor.
* Lines 2..N+1: The serial numbers to be tested, one per line
4 36 38 40 42
Sample Output
38
题目大意:找出质因子最大的数,
思路还是蛮简单的,不过一开始用了个很蠢的办法,毫无意外就tle了,然后百度了下,发现找素数可以用筛数法(不好解释,详情看代码),把每个数的编号定为此数的最大质因子,然后直接输出就行了。
下面是代码
#include<cstdio>#include<algorithm>
#include<string.h>
int a[20000],n;
void shusudabiao()
{
a[1]=1;
for(int i=2;i<=20000;i++)
{
if(!a[i])
{
a[i]=i;
for(int j=i*2;j<=20000;j+=i)
a[j]=i;
}
}
}
int main()
{
int mx=0,x,mxx=0;
memset(a,0,sizeof(a));
shusudabiao();
while(~scanf("%d",&n))
{
mx=0;
for(int i=0;i<n;i++)
{
scanf("%d",&x);
if(a[x]>mx)
{
mx=a[x];
mxx=x;
}
}
printf("%d\n",mxx);
}
return 0;
}