• poj 3048 Max Factor(素数筛)


      这题就是先写个素数筛,存到prime里,之后遍历就好,取余,看是否等于0,如果等于0就更新,感觉自己说的不明白,引用下别人的话吧:

      素数打表,找出20000之前的所有素数,存入prime数组,对于每个输入的数a,从prime数组最后一个数往前判断,如果a % prime[当前序号]== 0,那么将该素数就是输入数据a的最大素因子,找出所有输入数据的最大素因子,找出最大的那个对应的数据a即可,当a == 1的时候要特别处理。

      然而我现在还是不懂,为什么输入是1 1的时候输出1,题目也没说啊,还有最蛋疼的就是还是多组数据,题目又没说啊,有木有!!!我找了1小时,最后加个多组数据就A了,让我情何以堪。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int INF=0x3f3f3f3f;
    typedef long long ll;
    #define PI(A) printf("%d
    ",A)
    #define SI(N) scanf("%d",&(N))
    #define SII(N,M) scanf("%d%d",&(N),&(M))
    #define cle(a,val) memset(a,(val),sizeof(a))
    #define rep(i,b) for(int i=0;i<(b);i++)
    #define Rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define reRep(i,a,b) for(int i=(a);i>=(b);i--)
    const double EPS= 1e-9 ;
    
    /*  /////////////////////////     C o d i n g  S p a c e     /////////////////////////  */
    
    const int MAXN= 20000 + 5 ;
    
    //素数筛模板
    int prime[MAXN];  //第i个素数
    bool is_prime[MAXN+1];//is_prime[i]为true代表i是素数
    
    //返回n以内素数的个数
    int sieve(int n)
    {
        int p=0;
        for (int i=0; i<=n; i++) is_prime[i]=true;
        is_prime[0]=is_prime[1]=false;
        for (int i=2; i<=n; i++)
        {
            if (is_prime[i])
            {
                prime[p++]=i;
                for (int j=2*i; j<=n; j+=i) is_prime[j]=false;
            }
        }
        return p;
    }
    
    int inp[5000+5];
    
    int main()
    {
        int n=sieve(MAXN);
        int o;
        
        while(~SI(o))
        {
            for (int i=0; i<o; i++)
                SI(inp[i]);
            int ans=0;
            int k=0;
            for (int i=o-1; i>=0; i--)
            {
                int j;
                for (j=n-1; j>=0; j--)
                {
                    if (inp[i]%prime[j]==0)
                    {
                        break;
                    }
                }
                if (j>=k)
                {
                    k=j;
                    ans=inp[i];
                }
            }
            //如果ans被更新了 就输出
            if (ans)
                PI(ans);
            //否则 只有全是1的情况,所以输出1
            else puts("1");
        }
        return 0;
    }
  • 相关阅读:
    #2019090700004
    51nod 1191-贪心+并查集
    hdu 5015-矩阵快速幂
    树形DP—依赖背包模板
    HDU 1074—压缩DP
    动态绑定的开销
    动态绑定
    静态绑定(前期绑定)
    继承的一些优点
    多态置换原则初始化基类对象
  • 原文地址:https://www.cnblogs.com/s1124yy/p/5673928.html
Copyright © 2020-2023  润新知