• POJ3048 Max Factor


    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。

    本文作者:ljh2000
    作者博客:http://www.cnblogs.com/ljh2000-jump/
    转载请注明出处,侵权必究,保留最终解释权!

     

     

     

    Description

    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

    4
    36
    38
    40
    42

    Sample Output

    38

    Hint

    OUTPUT DETAILS: 
    19 is a prime factor of 38. No other input number has a larger prime factor.

    Source

     
     
    正解:线性筛+暴力
    解题报告:
      直接筛出质数,然后暴力就可以了。

      我连线性筛都写挂了一次,真是没救了...

     1 //It is made by ljh2000
     2 #include <iostream>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <cstdio>
     6 #include <cmath>
     7 #include <algorithm>
     8 #include <ctime>
     9 #include <vector>
    10 #include <queue>
    11 #include <map>
    12 #include <set>
    13 #include <string>
    14 #include <stack>
    15 using namespace std;
    16 typedef long long LL;
    17 const int MAXN = 50011;
    18 const int MAXM = 200011; 
    19 int n,N,a[MAXN],maxl[MAXN];
    20 int cnt,prime[MAXM],ans;
    21 bool vis[MAXM];
    22 
    23 inline int getint(){
    24     int w=0,q=0; char c=getchar(); while((c<'0'||c>'9') && c!='-') c=getchar();
    25     if(c=='-') q=1,c=getchar(); while (c>='0'&&c<='9') w=w*10+c-'0',c=getchar(); return q?-w:w;
    26 }
    27 
    28 inline void work(){
    29     n=getint(); for(int i=1;i<=n;i++) a[i]=getint(),N=max(a[i],N); ans=1; int x;
    30     for(int i=2;i<=N;i++) { if(!vis[i]) prime[++cnt]=i; for(int j=1;j<=cnt && i*prime[j]<=N;j++) { vis[i*prime[j]]=1; if(i%prime[j]==0) break;} }
    31     for(int i=1;i<=n;i++) {
    32     x=a[i];
    33     for(int j=1;j<=cnt;j++) {
    34         if(x%prime[j]!=0) continue;
    35         maxl[i]=prime[j]; while(x%prime[j]==0) x/=prime[j];
    36         if(x==1) break;
    37     }
    38     }
    39     for(int i=2;i<=n;i++) if(maxl[i]>maxl[ans]) ans=i;
    40     printf("%d",a[ans]);
    41 } 
    42 
    43 int main()
    44 {
    45     work();
    46     return 0;
    47 }
  • 相关阅读:
    实验三
    第四次实验
    作业
    第二次实验
    <转>JVM调优
    SQL Server的聚集索引和非聚集索引
    去除DataTable里面重复的数据
    sql server 与 Excel 导入导出
    C#学习笔记 委托和事件
    好多特效
  • 原文地址:https://www.cnblogs.com/ljh2000-jump/p/6067648.html
Copyright © 2020-2023  润新知