POJ-3048 求有最大的素数因子的数

来源:互联网 发布:mac怎么下载千牛 编辑:程序博客网 时间:2024/05/23 12:34

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.
Input
* Line 1: A single integer, N 

* Lines 2..N+1: The serial numbers to be tested, one per line
Output
* Line 1: The integer with the largest prime factor. If there are more than one, output the one that appears earliest in the input file.
Sample Input
436384042
Sample Output
38
Hint
OUTPUT DETAILS: 
19 is a prime factor of 38. No other input number has a larger prime factor.

    搞清楚题意,求有最大素数因子的数。要考虑的问题:它本身如果是一个素数,算不算呢?忘了算不算了,试一试就知道了。做之前先预处理筛素数!!

代码如下:

#include<iostream>#include<cmath>using namespace std;const int MAX=20005;int n;int a[50010];int prime[20010];void Isprime(){    prime[0]=0;    prime[1]=0;    prime[2]=1;    for(int i=3;i<MAX;i++)    {        if(i%2==0)            prime[i]=0;        else            prime[i]=1;    }    int temp=(int)sqrt(MAX*1.0);    for(int i=3;i<=temp;i++)    {        if(prime[i])        {            for(int j=i*i;j<MAX;j+=2*i)            {                prime[j]=0;            }        }    }}int judge(int x){    for(int i=x;i>0;i--)    {        if(prime[i] && x%i==0)        {            return i;        }    }    return 1;}int main(){    int x;    Isprime();    while(cin>>n && n)    {        int ans=0,maxn=0,m=0;        for(int i=1;i<=n;i++)        {            cin>>x;            ans=judge(x);            if(maxn<ans)            {                maxn=ans;                m=x;            }        }        cout<<m<<endl;    }    return 0;}



原创粉丝点击