zoukankan      html  css  js  c++  java
  • 素数筛选:HDU2710-Max Factor

    Max Factor

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

    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


    解题心得:

    1. 就是一个简单的素数筛选,然后暴力找一下因子,判断记录就可以了。没有什么好说的。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 2e4+100;
    bool pre_num[maxn];
    
    //先吧素数给筛选出来
    void get_pre_num()
    {
        for(int i=2; i<=sqrt(maxn); i++)
        {
            if(pre_num[i])
                continue;
            for(int j=i*i; j<maxn; j+=i)
                pre_num[j] = true;
        }
        pre_num[1] = pre_num[0] = true;
    }
    
    int main()
    {
        get_pre_num();
        int n;
        while(scanf("%d",&n) != EOF)
        {
            int Max = 0,pos = 1;
            for(int i=0; i<n; i++)
            {
                int now;
                scanf("%d",&now);
                int N = now;
                for(int j=2; j<=sqrt(now); j++)
                {
                    if(now%j == 0)//暴力找因子
                    {
                        if(!pre_num[j])
                        {
                            if(j > Max)//记录一下就可以了
                            {
                                Max = j;
                                pos = N;
                            }
                        }
                        while(now%j == 0)
                            now /= j;
                    }
                }
                if(now > 1 && !pre_num[now])//别忘了最后还剩下一个
                {
                    if(now > Max)
                    {
                        Max = now;
                        pos = N;
                    }
                }
            }
            printf("%d
    ",pos);
        }
    }
  • 相关阅读:
    CVE-2017-11826:Office Open XML 标签嵌套解析混淆漏洞
    未授权访问漏洞总结
    Linux提权—脏牛漏洞(CVE-2016-5195)
    Linux提权
    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)
    SSH后门万能密码
    Linux中使用gdb dump内存
    在 x64dbg 中设置条件断点和条件记录断点
    Linux中的.bash_ 文件详解
    Photoshop 第二课 工具-钢笔的使用
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9107298.html
Copyright © 2011-2022 走看看