首页 > 其他分享 >(数论)判断素数(朴素,根号,埃氏筛,欧拉筛线性筛)

(数论)判断素数(朴素,根号,埃氏筛,欧拉筛线性筛)

时间:2023-06-13 14:23:46浏览次数:43  
标签:maxx 埃氏 int namespace 素数 main 根号

// 最基本求一个素数(on),(osqrt(n))
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=2;i<n;i++)//o(n)
        if(n%i==0){
            cout<<"no";
            return 0;
        }
    for(int i=2;i<=n/i;i++)//o(sqrt(n))
        if(n%i==0){
            cout<<"no";
            return 0;
        }    
    cout<<"yes";
    return 0;
}
//埃氏筛,一次性求n之前所有素数(on)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,f[N],a[N],res,maxx=-1;
map<int,int>mp;
bool vis[N];
int main()
{
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i],maxx=max(maxx,a[i]);
    for(int i=2;i<=maxx;i++){
        if(!vis[i]){
            mp[i]=1;
            for(int j=i;j<=maxx;j+=i) vis[j]=true;
        }
    }
    for(int i=0;i<=n;i++) if(mp.count(a[i])) cout<<a[i]<<" ";
    return 0;
}
//欧拉筛(线性筛)(时间复杂度最快):https://www.luogu.com.cn/problem/P3383
//https://www.bilibili.com/video/BV1hR4y1u7e1/?spm_id_from=333.337.search-card.all.click&vd_source=b44efb267aea765a23ee5e2d900d1d5a
#include<bits/stdc++.h>
using namespace std;
const int N=1e8+10;
int n,res,k,prime[N],num;
bool vis[N];
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=2;i<=n;i++){
        if(!vis[i]) prime[++res]=i;
        for(int j=1;prime[j]<=n/i;j++){
            vis[prime[j]*i]=true;
            if(!(i%prime[j])) break;
        }
    }
    while(k--){
        scanf("%d",&num);
        printf("%d\n",prime[num]);
    }
    return 0;
}

 

标签:maxx,埃氏,int,namespace,素数,main,根号
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17477376.html

相关文章

  • 【230612-2】三角形ABC中,角A=60度,AB=2,BC=根号6,AD是角A的平分线。求:AD=?(23年全国高考
    【题目】三角形ABC中,角A=60度,AB=2,BC=根号6,AD是角A的平分线。求:AD=?(23年全国高考甲卷理科,16,5)......
  • 【230611-3】记三角形的内角A,B,C的对边分别是a,b,c,已知三角形ABC的面积为根号3,D为BC中点,
    【题目】记三角形的内角A,B,C的对边分别是a,b,c,已知三角形ABC的面积为根号3,D为BC中点,且AD=1.1)若角ADC=60度,求tanB2)若b^2+c^2=8,求b和c的值......
  • Python多进程使用队列共享数据协同判断素数
    感谢江西师范大学李雪斌老师提供素材和第一版本代码。问题描述:创建两个队列,qIn用来存储指定范围内的整数,qOut用来存放该范围内的所有素数。创建多个进程,每个进程依次从qIn队列中获取整数,并判断是否为素数,如果是素数则存入qOut。技术要点:1)使用Python标准库multiprocessing创建和管理......
  • 最优的素数判断代码(Python)是这样写出来的
    素数判断是个很经典的问题,各种语言的程序设计课程都会涉及到,按照素数定义(除了1和自身,素数没有其他因数)很容易写出下面的代码:defisPrime1(n):foriinrange(2,n):ifn%i==0:returnFalsereturnTrue功能完全没有问题,就是非常非常非常非常慢。......
  • 【每日一题】LeetCode 786. 第K个最小的素数分数(待补全题解思路)
    题目给你一个按递增顺序排序的数组arr和一个整数k。数组arr由1和若干素数组成,且其中所有整数互不相同。对于每对满足0<i<j<arr.length的i和j,可以得到分数arr[i]/arr[j]。那么第k个最小的分数是多少呢?以长度为2的整数数组返回你的答案,这里answer......
  • 【学习笔记】根号算法
    分块经典操作暴力思想先考虑最暴力的做法如何实现。平衡思想设长度\(n\),块长\(B\)。多数是定一个块长,使整块与散块、查询与修改的复杂度近似相等,并分别考虑整块好散块的情况。暴力重构指对散块处理时如果会破坏一个块的既有标记等等,可以选择暴力重新构建当前的标记。复......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交代......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交......
  • PTA数素数
    题目描述//package蓝桥2023czw;importjava.util.Scanner;importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=input.nextInt();intm=input.nextInt......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交......