`
CalvinMnakor
  • 浏览: 52085 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

质数(素数)的求解(筛选法)

阅读更多

法一:

求质数的方法最简单的就是这样:

 

 写道
判断N是否是质数
从2到根号下N 以此判断是否能整除

 

int isprim(long int n)
{
	for(int i = 2; i <=sqrt(N); i++)
		if(n % i == 0) return 0;
	return 1;
}

 要依次产生前多少项质数 我们可以这样:

 

void get1(long int s[], int N)
{
	int i;
	long int n;

	s[1] = 2;
	for(i = 2; i < N; i++){
		n = s[i-1] + 1;	// the latest number
		while(!isprime(n)) n++;
		s[i] = n;
	}
}

 

 法二:筛选法

 

从第3个数开始,以此用当前产生的所有素数来排除下一个要产生的素数:

 

比如 写道
已有1,2,3,5
则下个数从6开始,并排除能整除2,3,5的数 即6,8,9,10....

 

 实现算法:

 

/* 筛选法  */
void get2(long int s[], int N)
{
	int cur, i;
	long int n;

	s[1] = 2;
	cur = 2;
	while(cur < N){	// find the num'th 
		n = s[cur-1] + 1;	// or bigger one to begin searching
		while(1){
			for(i = 1; i < cur; i ++)
				if(n % s[i] == 0)	// not match
					break;
			if(i == cur) {	// match
				s[cur] = n;
				break;
			} else 
				n++;	//next trying		
		}
		cur++;	//next number
	}
}

 

 两者比较:


产生前10万个素数:

法一:150s

法二:25s

分享到:
评论

相关推荐

    利用筛选法求解超大范围的质数

    在编程领域,特别是涉及到数值计算和算法设计时,求解质数是一项常见的任务。质数是大于1且只有1和其本身两个正因数的自然数。...通过不断迭代和优化,我们可以构建出更加高效和稳定的质数求解工具。

    筛选法和大素数模板快速统计素数个数并输出幸运数字

    首先,使用筛选法生成1亿以内的素数列表,接着对每个素数应用大素数模板的质数测试,计算其每位数字之和,如果这个和也是素数,那么这个数就是幸运数字。最后,将幸运数字输出或存储。 在实际编程时,需要注意内存...

    python使用筛选法计算小于给定数字的所有素数

    筛选法,又称埃拉托斯特尼筛法(Sieve of Eratosthenes),是一种有效找到所有小于给定数的素数的算法。这种方法通过逐步排除合数(非素数)来找到素数。以下将详细介绍该方法及其在Python中的实现。 筛选法的基本...

    java使用筛选法求n以内的素数示例(java求素数)

    以下是一个使用筛选法在Java中求解n以内素数的示例代码: ```java public class AratosternyAlgorithm { public static void getPrimes(int n) { if (n || n &gt; 1000000) { throw new IllegalArgumentException(...

    python素数筛选法浅析

    Python代码中,使用了`time`模块来计算执行时间,可以看出通过素数筛选法求解1千万以内的素数比普通素数判断法要快很多。接着,文章中给出了用C++实现的类似算法,通过位压缩优化空间,并展示了用C++的执行效率明显...

    基于Jupyter 使用列表实现筛选法求素数(python)

    Jupyter 使用列表实现筛选法求素数 使用列表实现筛选法求素数可以极大的提高计算机的运算速率。 maxNumber = int(input("请输入一个大于2的自然数:")) lst = list(range(2,maxNumber)) #最大整数的平方根 m = int...

    素数环 回溯法——C语言代码

    这通常涉及到一个效率较高的素数筛选算法,如埃拉托斯特尼筛法(Sieve of Eratosthenes)。 2. **回溯函数**:这是算法的核心部分。该函数接受一个当前的素数,一个已经构造的环,以及剩余的素数列表。它会尝试将...

    C/C++利用筛选法算素数的方法示例

    素数指的是因子只有1和本身的数(1不是素数),求解素数在数学上应用非常广泛,而求解n以内的素数也是我们编程时常遇到的问题,在这个问题上,筛选法求解素数运行得非常快。 i在2到n-1之间任取一个数,如果n能被整除...

    【数论基础】判断素数、埃拉托色尼筛选法、欧几里得算法、反复平方法

    快速筛选素数:埃拉托色尼筛选法 只有一行的算法:欧几里得算法求解最大公约数 求幂乘:反复平法法 筛选素数 小学的知识点,不解释了; bool isPrime(int d){//判断是否是素数 if(d==2) return true; if(d&lt;2|...

    C经典算法之Eratosthenes筛选求质数

    Eratosthenes筛法的时间复杂度大致为O(n log log n),这使得它成为一种高效的求解质数的方法。此外,该算法的空间复杂度为O(n),因为需要一个大小为n的数组来记录每个数的状态。 #### 应用场景 Eratosthenes筛法在...

    算法-求一亿以内的回文质数(素数).rar

    或者,利用质数筛法(如埃拉托斯特尼筛法)提前筛选出所有1亿以内的素数,再进行回文判断。 这个任务不仅涉及基础的算法和数据结构,还考验了编程效率和内存管理。通过解决这个问题,可以提升编程技巧,理解并实践...

    matlab 求素数 (四种方法)

    埃拉托斯特尼筛法是一种经典的求素数的方法,通过逐步筛选掉非素数来得到所有小于给定数的素数。在MATLAB中,可以创建一个全为1的布尔数组,然后从2开始,每次找到一个未被筛掉的数(即当前的素数),就将其倍数...

    基于jupyter notebook的python编程—–使用列表实现筛选法求素数(输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表)

    理解筛选法求解素数的原理 理解列表切片操作 熟练运用内置函数 enumerate() 熟练运用内置函数 filer() 理解序列解包工作原理 初步了解选择结构和循环结构 例题: 编写程序,输入一个大于 2 的自然数,然后输出小于该...

    sushu.rar_求素数

    标题中的"sushu.rar_求素数"暗示了这是一个关于使用筛选法求解素数问题的压缩包,其中包含了一个名为“筛选法求素数.cpp”的源代码文件,以及一个可能是文档说明的“www.pudn.com.txt”文件。 筛选法,也被称为...

    c语言用数组实现求素数,并且运算过程仅使用+-法

    通过上述分析可以看出,本示例通过简单的数组操作和筛选逻辑实现了高效地求解指定范围内所有素数的功能。尽管在运算过程中仅限于加法和减法,但这并不妨碍其实现功能的强大。这种方法不仅适用于教学目的,也能够在...

    用汇编语言求1000以内的质数

    求解一定范围内的所有质数是一个经典的算法问题,通常可以通过筛选法(如埃拉托斯特尼筛法)来实现。 ### 汇编代码解析 #### 初始化部分 ```assembly mov si, offset da; 取首地址 mov cx, count - 1; 循环变量 ``...

    求出1000以内的素数及素数的个数

    该方法通过逐层筛选的方式,从最小的素数2开始,去除所有2的倍数;接着,下一个未被去除的数是3,再去除所有3的倍数……以此类推,直到遍历到所需范围内的所有数为止。这种方法特别适用于寻找一定范围内所有的素数,...

    qiusushu.rar_求10000 素数_求素数

    然而,对于更大的数,更高效的算法如埃拉托斯特尼筛法就显得更为重要,因为它可以在相对短的时间内筛选出大量素数。 压缩包中的“www.pudn.com.txt”可能是一个包含程序代码、说明文档或相关资源的文本文件,而...

    质数演示vb代码

    通过两次循环,第一次筛选质数,第二次将找到的质数添加到列表框中。 这个VB程序不仅能够演示质数的求解过程,还可以作为教学工具,帮助初学者理解和掌握编程中的逻辑控制、数组操作以及用户交互等基础知识。通过...

Global site tag (gtag.js) - Google Analytics