筛法专题

常见素数筛法

列出几种常用的素数筛选法,附上计时器。。。 #include<cstdio>#include<cstdlib>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<algorithm>#include<cstring>#include<string>#inclu

Python 埃氏筛法

# -*- coding: utf-8 -*-# filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。# 构造一个奇数序列,排除了所有偶数,因为除了2之外的偶数都是非素数def _odd_iter():a = 1while True:a = a + 2yield a #

幸运数 幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。

package org.bluebridge.topics;/** 幸运数幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。首先从1开始写出自然数1,2,3,4,5,6,.... 1 就是第一个幸运数。 我们从2这个数开始。把所有序号能被2整除的项删除,变为:1 _ 3 _ 5 _ 7 _ 9 ....把它们缩紧,重新记序,为: 1 3 5 7 9 .... 。这时,3为第2个幸

poj 2478 Farey Sequence(基于素数筛法求欧拉函数)

http://poj.org/problem?id=2478 求欧拉函数的模板。 初涉欧拉函数,先学一学它基本的性质。 1.欧拉函数是求小于n且和n互质(包括1)的正整数的个数。记为φ(n)。 2.欧拉定理:若a与n互质,那么有a^φ(n) ≡ 1(mod n),经常用于求幂的模。 3.若p是一个质数,那么φ(p) = p-1,注意φ(1) = 1。 4.欧拉函数是积性函数:

素数筛,单点的欧拉函数,筛法求欧拉函数

返回了在素数的个数、 int prime[maxn] , vis[maxn] ;int sieve(int n){int m = (int)sqrt(n+0.5) , i , j ;for(i = 2 ; i <= m ; i++)if( !vis[i] ) i{for(j = i*i ; j <= n ; j += i)vis[j] = 1 ;}j = 0 ;for(i

hdu1431 素数回文(素数筛/埃拉托斯特尼筛法)

素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9505    Accepted Submission(s): 2221 Problem Description xiaoou33对既是素数又是回文的数特别感

HDU4548_美素数【水题】【筛法求素数】

美素数 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 3315    Accepted Submission(s): 1112 Problem Description   小明对数的

HDU2098 分拆素数和【水题】【筛法求素数】

分拆素数和 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 23345    Accepted Submission(s): 10115 Problem Description 把一个偶数

POJ2034 Anti-prime Sequences【素数筛法】【DFS】

题目链接: http://poj.org/problem?id=2034 题目大意: 给你三个整数 N、M、D。使得从 N 到 M 的自然数按要求排列后,相邻且连续的 D 个数内的自然数和为非素数。找到字典序最小的排列并输出,如果找不到则输出 "No anti-prime sequence exists."。 解题思路: 用深搜来做,一步一步的确定第 Cnt 个数,直到

poj 3090 Visible Lattice Points(数论:筛法打表欧拉函数)

和之前做过的一个题很像 对于size==4 从1到4考虑y坐标 不妨设x>=y y==1: (1,1) y==2: (1,2) y==3: (1, 3) (2, 3) y==4: (1, 4) (3, 4) 共6个满足条件,把x y交换下且去除(1, 1)的重复情况得到2×6-1=11 再加上(0,1) (1,0)两种情况得到13 所以结果应该为: 代码如下: #

埃氏筛法之素数

原理: 首先将2~n个数记录下来,2作为最小素数,所以2的倍数不是素数,从记录中划去,扫一遍之后,将3作为最小素数,3的倍数划去,如此下去,求出所有素数。如表格所示: 23456789101112131415161718192023-5-7-9-11-13-15-17-19-23-5-7---11-13---17-19- 代码: 判断是否是素数: bool is_prim

POJ 2689 Prime Distance(大区间素数筛法,两次筛法)

题目链接:http://poj.org/problem?id=2689 题意:求一个区间 [L,U] 内的差值最大的和差值最小的相邻素数对。(1<=L< U<=2,147,483,647),区间长度U-L<=1000000 题解: 维基百科:埃拉托斯特尼筛法 单纯打表是不行的,L,U的

数论基础题目八题【欧几里得】【筛法素数】【中国剩余定理】

之前看的数论的知识,现在做几道题目找找感觉..... poj 1061 传送门 题目大意,给你x,y,m,n,L。代表青蛙a的坐标x,青蛙b的坐标y,青蛙a一次跳的距离m,青蛙b一次跳的距离n,以及mod的值L,求经过多少次跳相遇。即求:(m-n)*x0=(x-y)(mod L);  模线性方程的解,不过要注意处理,因为(m-n)和(x-y)有可能是负的,如果(m-n)是负的,则直接对

Euler 筛法(欧拉筛法)

筛法 - OI Wiki 埃氏筛法很好理解,素数的倍数都是合数,做标记不筛即可。 但是2和3都能筛到6,12,18,等,会重复标记。 欧拉筛理解: 筛选 n 以内的素数,存入vector<int>pri 中。 not_prime标记合数。 # 埃氏筛是给 质数 乘以 每个 i,得出所有倍数。 # 这里给 每个 i 乘以 质数 如果自己是这个质数的倍数,就结束,就避免了重复。

Joseph's problem I 筛法求素数和数组环

HOJ 1016 Problem Description The Joseph’s problem is notoriously known. For those who are not familiar with the problem, among n people numbered 1,2…n, standing in circle every mth is going to be ex

【杂项总结】筛法,内部类,typedef,typename

1.筛法: 做表一般只需要做到sqrt(n)。 ①判断某个数是否为质数:只需要做到sqrt(n)+1,如果目前有有一个质因数,则他为合数;如果没有则为质数。 ②判断质因数个数:做到sqrt(n)+1,每次判断出一个就用n/primei,直到不能再/primei。这样做到头,如果没找到质因数则n一定为质数(质因数个数为0);若n辗转相除之后!=1,且找到至少一个质因数,则质因数个数++。 (例题见h

F. Fake Maxpooling(二维单调队列,类似筛法求lcm) 2020牛客暑期多校训练营(第二场)

题意: a [ i ] [ j ] = l c m ( i , j ) a[i][j]=lcm(i,j) a[i][j]=lcm(i,j) 求所有 k ∗ k k*k k∗k小矩阵的最大值和。 思路: 维护横向单调队列求每一行的前 k k k个数最值,再用纵向单调队列求出纵向前 k k k个数最值。这样求出每一点对应 k ∗ k k*k k∗k矩阵的最值了。 但是本题求lcm是log,会

P1579 哥德巴赫猜想(升级版)Python 埃拉托斯特尼筛法

哥德巴赫猜想(升级版) 题目背景 1742 年 6 月 7 日,哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于 9 9 9 的奇数都可以表示成 3 3 3 个质数之和。质数是指除了 1 1 1 和本身之外没有其他约数的数,如 2 2 2 和 11 11 11 都是质数,而 6 6 6 不是质数,因为 6 6 6 除了约数 1 1 1 和 6 6 6 之外

华为编程面试题目 求2到2000的质数 源程序筛法求质数

内存足够大,写程序输出2到2000的质数。 '''华为面试题目 求2到2000的质数'''N = 2000number = list( range(2, N+1) )times = 0checknum = list(range(2,int((N+1)/2)+1))for i in checknum:for index in number:times += 1if index != i:

【PAT】1116. Come on! Let's C (20)【素数表-埃拉托斯特尼筛法】

题目描述 “Let’s C” is a popular and fun programming contest hosted by the College of Computer Science and Technology, Zhejiang University. Since the idea of the contest is for fun, the award rules are fu

线性筛法求素数(欧拉筛法)(求质数,O(n)时间复杂度)(外加求每个整数的最小质因子)(python)

前言: python 中求质数的方法有好几种,这里就讲解时间复杂度最低的算法欧拉筛法,时间复杂度为O(n),这是数论中也是算法比赛中必须掌握的方法。 本篇博客还会额外讲解求每个整数的最小质因子,什么是质因子?顾名思义,就是是质数的因子,求这个有什么用呢?下篇博客X的因子链(数论,python)(算术基本定理)(欧拉筛法)会给大家讲解一道例题,在例题中讲解它的用法。 思路: 线性筛法的整体思

蓝桥杯算法基础(32):素数,埃式筛法,快速幂,斐波那契与矩阵幂运算

素数 有些人认为一个人一生中有三个周期,从他或她出生的那一天开始。这三个周期是身体周期,情感周期的和智力的周期,他们有周期的长度为23,28,和33天。每一个周期都有一个高峰。在一个周期的高峰期,一个人在他/她在相应的领域(身体,情绪或精神)。例如,如果它是心理曲线,思维过程会更清晰和集中会更容易。由于三个周期有不同的周期,所以这三个周期的峰值一般发生在不同的时间。我们想确定何时发

《算法笔记》系列----质数的判断(埃氏筛法)

目录 一、朴素算法 二、埃氏筛法 1、与朴素算法对比 2、算法介绍     3、例题即代码实现 一、朴素算法   从素数的定义中可以知道,一个整数n要被判断为素数,需要判断n是否能被2.3.n- 1中的一个整除。只2,3..n- 1都不能整除n,n才能判定为素数,而只要有一个能整除n的数出现,n就可以判定为非素数。         这样的判定方法没有问题,复杂度为0(

埃拉托斯特尼筛法+细节证明

埃拉托斯特尼筛法 顾名思义就是筛素数的方法 首先埃拉托斯特尼筛法实基于这样一个定理:一个正合数n,一定存在小于sqrt(n)的素数因子 所以此筛法就是将n的所有小于等于sqrt(n)的素数因子圈出来,然后把他们的倍数划去,剩下的没有被划去的就是素数 例如:25,sqrt(25)=5,那么所有小于等于5的素数因子就是2,3,5 我们把2,3,5的所有倍数划去,也就是4,6,8,9,10,12,

poj2689筛法应用

题意:输入两个数字L,U,0<U-L<=1e6,1<=L<U<=2147483647,找到最近的相邻素数和最远的相邻素数。 完成这道题需要细心,读完题后我们可以找到解决问题的思路:由于”L and U (1<=L< U<=2,147,483,647)“,开一个2147483647的数组显然不能满足内存要求,又由于”The difference between L and U will not

【中国大学MOOC】java程序设计-week3-用“埃氏筛法”求2~100以内的素数

1.题目 用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。 要求使用数组及增强的for语句。 提示:可以使用一个boolean类型的数组,所以“将某个数i去掉”,可以表示成a[i]=false。当然也可以使用其他方法。 请注意代码风格:类名、变量名的命名,以及必要注释等等; 评分标准: 使用了数组