Max Factor(找最大素数)

来源:互联网 发布:js绑定事件on方法 编辑:程序博客网 时间:2024/05/16 06:36

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.

这些数都有因子,求出这些数字里的因子是素数的并且是最大的,然后把这个数字输出来。

刚开始用的最笨的方法,先建一个素数表,(是不是素数),然后把给出的数字的因子全部都列举出来,比较大小。

之后看题解,发现了一个更没得说的一个做法:打表的时候,直接把他的最大的素数因子给存进去了,直接比较就可以,很溜额。


#if 1#include<iostream>#include<cstring>using namespace std;int prime[20010];void fun() {for(int i=0; i<=20010; i++)prime[i]=1;for(int i=2; i<=20010; i++) {if(prime[i]==1)   {prime[i]=i;for(int j=2; i*j<=20010; j++){prime[i*j]=i; }                                                                                     }     }    }int main(){int n; fun();//cout<<prime[38]<<endl;while(cin>>n){int endx=-1,endy=-1;for(int i=0; i<n; i++){int x;cin>>x;if(prime[x]>endx){endx=prime[x];endy=x;}}cout<<endy<<endl;}}#endif





原创粉丝点击