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);
        }
    }
  • 相关阅读:
    sql server 扩展存储过程
    SQL SERVER 数据导出JSON
    Jquery AJAX ASP.NET IIS 跨域 超简单解决办法
    切换 NPM 镜像源
    HTML 简介
    mongoose 安装及配置
    Windows下MongoDB的安装过程及基本配置
    Node.js中npm常用命令大全
    --nodejs详细安装步骤
    Go语言为何说它优雅?-- Golang中的几个常用初始化设计
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9107298.html
Copyright © 2011-2022 走看看