• HDOJ/HDU 2710 Max Factor(素数快速筛选~)


    Problem 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,然后输入n个正整数(1<=a[i]<=20000),要你求这n个数里哪个数的最大素因数(即能被该数整除(包括这个数本身!)的最大素数)最大,然后输出这个数。若有两个数的最大素因数相同,则输出前面那个。

    用到了素数快速筛选~不然会超时的~

    import java.util.Arrays;
    import java.util.Scanner;
    
    /**
     * @author 陈浩翔
     */
    public class Main{
        static boolean db[] = new boolean[20005];
        public static void main(String[] args) {
            dabiao();
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()){
                int n = sc.nextInt();
                int a[] = new int[n];
                int prime[] = new int[n];
                for(int i=0;i<n;i++){
                    a[i]=sc.nextInt();
                    for(int k=1;k<=a[i];k++){
                        if(db[k]&&a[i]%k==0){
                            prime[i]=k;
                        }
                    }
                }
                int max=prime[0];
                int con=0;
                for(int i=1;i<n;i++){
                    if(prime[i]>max){
                        max=prime[i];
                        con=i;
                    }
                }
                System.out.println(a[con]);
            }
        }
        private static void dabiao() {
            Arrays.fill(db, true);
            for(int i=2;i<=Math.sqrt( db.length);i++){
                for(int j=i+i;j<db.length;j+=i){
                    if(db[j]==true){
                        db[j]=false;
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    基于网络监听方式的电子邮件实现基础
    在一个存储过程里面执行另一个存储过程的应用
    Vim复制单个字符
    Linux下fsck修复文件系统
    (转载)2011年金山软件C++开发工程师笔试题 关于逆序输出
    (转载)C++ string详解
    (转载)Linux下网络API
    (转载)软中断和硬中断
    (转载)找工作经历总结百度offer
    (转载)Vim入门图解说明
  • 原文地址:https://www.cnblogs.com/webmen/p/5739171.html
Copyright © 2020-2023  润新知