zoukankan      html  css  js  c++  java
  • P3383 【模板】线性筛素数

    P3383 【模板】线性筛素数

    题解

    说好的数组不能开很大的呢!??!这个题开了1e7+10的数组也没事QWQ

    埃氏筛也能水过

    代码

    1.线性筛

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int maxn=1e7+10;
    int not_prime[maxn],prime[maxn];
    int m,n,cnt_pri;
    int a[maxn];
    
    void xxs(int mn)
    {
        memset(not_prime,0,sizeof(not_prime));
        not_prime[1]=1;
        for(int i=2;i<=mn;i++)
        {
            if(!not_prime[i])  prime[++cnt_pri]=i;
            for(int j=1;j<=cnt_pri;j++)
            {
                if(prime[j]*i>mn) break;
                not_prime[prime[j]*i]=1;
                if(i%prime[j]==0) break;
            }
        }
    }
    
    
    int main()
    {
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
        
        xxs(m);
        
        for(int i=1;i<=n;i++)
          if(not_prime[a[i]]) printf("No
    ");
          else printf("Yes
    ");
        
    }

    2.埃氏筛

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int maxn=1e7+10;
    int is_prime[maxn];
    int m,n;
    int a[maxn];
    
    int main()
    {
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
        
        memset(is_prime,1,sizeof(is_prime));
        is_prime[1]=0;
        for(int i=2;i<=m;i++)
        {
            if(is_prime[i])
              for(int j=i+i;j<=m;j+=i)
              is_prime[j]=0;
        }
        
        for(int i=1;i<=n;i++)
          if(is_prime[a[i]]) printf("Yes
    ");
          else printf("No
    ");
        
    }
  • 相关阅读:
    判断微信浏览器
    文章迁移
    ECharts使用—折线图动态加载
    vue-cli入门
    gulp使用详解
    gulp使用入门
    Chrome扩展插件流程
    div界面元素生成图片
    xss攻击与防御
    bootstrap-table使用详解
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11003756.html
Copyright © 2011-2022 走看看