埃氏筛法之素数

2024-06-12 02:38
文章标签 素数 筛法 埃氏

本文主要是介绍埃氏筛法之素数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理:

首先将2~n个数记录下来,2作为最小素数,所以2的倍数不是素数,从记录中划去,扫一遍之后,将3作为最小素数,3的倍数划去,如此下去,求出所有素数。如表格所示:

234567891011121314151617181920
23-5-7-9-11-13-15-17-19-
23-5-7---11-13---17-19-

代码:

判断是否是素数:

bool is_prime(int n){for(int i=2;i*i<=n;i++){if(n%i==0)return false;}return n!=1;
}
埃氏筛法:

const int MAX  = 1000;
int prime[MAX];
bool is_prime[MAX];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;
}



这篇关于埃氏筛法之素数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052967

相关文章

【牛客网 2017年校招模拟笔试(第一场)】超级素数幂

超级素数幂 描述 如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。 输入 输入一个正整数n(2 ≤ n ≤ 10^18) 分析 暴力枚举幂q,将n开q次方之后得到p,检查p是否为素数,并且检查p的q次幂是否等于n。 *要注意精度问题,代码待之后补充。

素数伴侣--最大二分匹配

#include<bits/stdc++.h>using namespace std;#define N 100int edge[N][N],cx[N],cy[N];//edge记录两点的关系,如果两点相连,则edge【i】【j】为1int visited[N];//判断该店是否被访问过int nx,ny,res;const int M=60000+100;bool prim[M];

算法题--华为od机试考试(整数对最小和、素数之积、找城市)

目录 整数对最小和 题目描述 注意 输出描述 示例1 输入 输出 说明 解析 答案 素数之积 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 说明 解析 找城市 题目描述 输入 输出 示例1 输入 输出 示例2 输入 输出 说明 解析 答案 整数对最小和 考察排序,数组拍平 题目描述

判断101 - 200之间有多少个素数,并输出所有素数。

题目:判断101 - 200之间有多少个素数,并输出所有素数。 解法一:程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 void main(){long f1, f2;int i;f1 = f2 = 1;for (i = 1; i <= 20; i++){printf("%12ld %12ld", f1, f2);if (i

HDU——2097.sky数、2098.分拆素数和、2099.整除的尾数

目录 2097.sky数 题目描述 运行代码 代码思路 2098.分拆素数和 题目描述 运行代码 代码思路 2099.整除的尾数 题目描述 运行代码 代码思路 2097.sky数 题目描述 Problem - 2097 Problem Description Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这

判断一组数据哪些是素数,并统计一个数组中元素的出现频率

import java.util.HashMap;import java.util.Map;public class Test_A26 {//判断一个数是不是素数public static boolean isPrime(int num){if(num<=1){return false;}for(int i=2;i<=Math.sqrt(num);i++){if(num%i==0){retur

判决素数个数(信息学奥赛一本通-T1409)

【题目描述】 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。 【输入】 两个整数X和Y(1 ≤ X,Y ≤ 105)。 【输出】 输出一个整数,表示X,Y之间的素数个数(包括X和Y)。 【输入样例】 1 100 【输出样例】 25 【源程序】 #include<iostream>#include<cmath>using namespace std;bool prime(

素数分布 2:素数定理

素数分布:素数定理 研究素数素数的个数问题, π ( x ) \pi(x) π(x)表示不超过 x x x的素数的个数。 从到素数个数从到素数个数11002511000168101200211001200013520130016200130001273014001630014000120401500174001500011950160014500160001146017001

n!素因子分解中素数p的幂

n!素因子分解中素数p的幂为 [n/p]+[n/(p^2)]+[n/(p^3)]+…… nefu 118 传送门 n!后面有多少个0 Problem : 118 Time Limit : 1000ms Memory Limit : 65536K description 从输入中读取一个数n,求出n!中末尾0的个数。 input 输入有若干行。第一行上

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对既是素数又是回文的数特别感