• POJ 3048 Max Factor (筛素数)


    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


    题意:给你n个数,让你求出其中质因数最大的数
    思路:这是筛素数的思想,在筛素数的时候,记录每个数对应的最大质因数,这样在访问该数的时候可以以o(1)的复杂度找到它所对应的最大质因数。再加上贪心的想法,在每次访问的时候找到当前最大质因数,并且记录该数。

    代码如下:


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <cmath>
     6 using namespace std;
     7 
     8 const int N=20010;
     9 bool a[N];
    10 int ans[N];
    11 
    12 void isprime() //作用:找到每个数所对应的最大素数
    13 {
    14   int k=0;
    15   memset(a,true,sizeof(a));
    16   a[0]=a[1]=false;
    17   for(int i=2;i<N;i++)
    18   {
    19     if(a[i])
    20     {
    21       ans[i]=i;
    22       for(int j=i*2;j<N;j+=i)
    23       ans[j]=i;
    24 
    25       a[j]=false;
    26     }
    27   }
    28 }
    29 
    30 int main()
    31 {
    32   isprime();
    33   int m;
    34   while(~scanf("%d",&m))
    35   {
    36     int maxn=-N;
    37     int x=-N;
    38     while(m--)
    39     {
    40       int a;
    41       scanf("%d",&a);
    42       if(ans[a]>maxn)
    43       {
    44         maxn=ans[a];
    45         x=a;
    46       }
    47     }
    48     printf("%d
    ",x);
    49   }
    50   return 0;
    51 }

     
  • 相关阅读:
    Memcached使用与纠错(附代码和相关dll)
    python函数
    python操作文件
    python基础2
    SpringMVC中使用@ResponseBody注解将任意POJO对象返回值转换成json进行返回
    利用aspose-words 实现 java中word转pdf文件
    POI各Jar包的作用(转)
    java利用poi 把ppt转化为图片,
    SpringMVC中 解决@ResponseBody注解返回中文乱码
    springMVC 使用注解注入接口实现类
  • 原文地址:https://www.cnblogs.com/Amidgece/p/5745739.html
Copyright © 2020-2023  润新知