质数(素数)的几种求法

质数素数)的几种判断方法 如果使用素筛法时,参见代码段6的init_prime() 函数,当i = 2,3,5时,30都会被标记一次,但是线筛法的思想是,找到最小素因子2所对应的因子15,用15*2 标记出30,因为15是30的最大因子,是30的对后一个因式,是i值循环加加的过程中,最后一次得到30的机会,用来标记30,30的有且一次的标记机会。当前质数为2时,标记2的倍数,6被标记了一次,当执行到质数3时,6作为3的倍数,又被标记了一次,所以,6被标记了2次。30存在的质数因子为:2,3,5,所以,它将被标记3次。 阅读详情

质数就是只能被1和它本身整除的数。求质数在程序设计和算法中很常见,尤其是在密码学中经常用到质数。最通常的想法就是依据定义来求质数

如求100以内的质数,我们会写出如下的算法:

int prime_1(int num)
{
	int cur=2;
	int count=0;   //记录质数个数
	while (cur<num)
	{
		int factor=2;  //每次循环从2开始判断
		while (factor<cur)
		{
			if (cur%factor==0)
			{
				break;
			}
			factor++;
		}
		if (factor==cur)
		{
			cout<<cur<<" ";
			count++;
		}
		cur++;
	}
	return count;
}

对于每一个质数都要除到比它小的那个数才能确定下来,这样会做许多无用功。比如11,比如从210判断9次才能确定下来。那能不能减少判断次数呢,许多人就会想到只要判断到n/2即可,后边的数不用判断。是的,只要不能被n/2以内的数整除,n就是质数。我们再来想想,一个数n能被另一个数m整除,整除结果为k。可以表示为n=m*kmk就称作m的因子,mk的大小有三种情况,m<k, m=k, m>k,我们只需判断到m=k=sqrt(n)为止,后边的就无需判断,因为如果有大于sqrt(n)的因子那么另一个因子一定小于sqrt(n),小于sqrt(n)的情况已经判断过了,所以不用再次判断了,这样就能减少判断次数。

int prime_2(int num)
{
	int count=0;
	int cur=2;
	while (cur<num)
	{
		int maxcmp=(int)sqrt(cur);
		int factor=2;
		bool flag=true;  //设定标志位,如果不是质数置为false
		while(factor<=maxcmp)
		{
			if (cur%factor==0)
			{
				flag=false;
				break;
			}
			factor++;
		}
		if (flag)
		{
			cout<<cur<<" ";
			count++;
		}
		cur++;
	}
	return count;
}

利用一个性质:一个合数(非质数)都能分解为若干个比它小的质数的乘积。12=2*2*3, 15=3*5,如果我们把以前的质数保存起来,只需判断是否能被比它小的质数整除即可,结合上面的分析只需判断能否被不大于sqrt(n)的质数整除即可,按照这个思路,写出如下代码:

int prime_3(int num)
{
	int count=0;
	int *result=new int[num];    //记录找到的质数
	result[0]=2;
	int cur=3;
	while(cur<num)
	{
		bool flag=true;  //设定标志位,如果不是质数置为false
		int maxcmp=(int)sqrt(cur);
		int index=0;
		while(result[index]<=maxcmp)
		{
			if (cur%result[index]==0) //只判断能否被之前保存的质数整除
			{
				flag=false;
				break;
			}
			index++;
		}
		if (flag)
		{
			count++;
			result[count]=cur;
		}
		cur++;
	}
	for (int index=0;index<count+1;index++)
	{
		cout<<result[index]<<" ";
	}
	delete []result;
	return count;
}



 


Python 算法之 求素数质数 Python 如何求素数质数 文章目录Python 如何求素数质数素数质数(重点)方法一:枚举方法二:厄拉多塞筛法【埃氏筛】方法三:线性筛相关博客 素数质数(重点) 先明白什么是素数 质数,英文名:Prime number,又称为素数,指的是值大于1的 自然数中,除了1和该数自身外,无法被其他自然数整除的数,大于1的自然数若不是素数,则称之为合数,注意1既不是质数也不是合数。 题目 统计所有小于非负整数 n 的质数的数量。 示例 输入 输出 注释 一 n=10 4 小于 1 阅读详情

相关推荐

ACM数论专题3——素数质数

ACM数论专题3——素数素数是什么蛮力算法素数蛮力算法的实现以及分析时间复杂度蛮力算法的改进时间复杂度**埃筛[^2]**时间复杂度 素数是什么 质数1 (prime number)又称素数,有无限个。 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。 所以最小的素数是2哦~依次是2,3,5,7,11,13,17,19… 蛮力算法素数 蛮力算法的实现以及分析 很容易能够想到就是...

qq_37136305的博客 2072

质数(素数)的方法

质数是数重要的一环,所谓质数,就是除了1和它本身外不存在任何因子的数。以下整理了一下c语言中质数求法。 问题:输入一个正整数n(n>=2),求不大于n的全部质数 方法一:循环法 思路:判断一个数n是不是质数,可以用2到√n之间的所有整数去除n,如果都不能整除,那么n是质数。设计...

chuainong8497的博客 882

Python编程新手看过来,如何求素数 (Python习教程)

本期的Python习教程是针对新入门Python编程的新手来写的:关于怎么求素数!一、什么是素数素数就是质数,通俗点说就是只能被1和其本身整数的数就是素数(1除外)举个例子:2,3,4,5,6当中,根据上面的定义,2只能被1整数(因为任何数和1整除都都等于它本身)二、素数计算思路2/1=22/2=1所以 2 是素数3/1 =33/2 =1.53/3 = 1所以 3 也是素数我们再看 44/2 ...

weixin_30480583的博客 1万+

算法】求质数常见的三种方法

最近新开了一个栏目,打算记一些常见问题的算法,以后说不定有用到可以套用一些。 质数的定义 质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。 这次我们的例题是: 求n以内的质数。(其中 n是传入的参数)。 这里我们介绍三种常见方法: 1.完全遍历法: 这种算法比较基本,对于每个数n,将n依次从2除到n,然后对余数进行比较,如...

小浣熊的博客 3万+

连续质数计算python

描述:获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。 注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。

rosediver的博客 4912

素数的方法完整归纳,的不仅是“求素数”!

吐血归纳,花式求素数,Miller-Rabin素性测试、Eratosthenes筛、线性筛,你想怎么求就怎么求,附详细讲解,算法不是背模板!

Veggie的博客 2万+

判断素数几种方法的总结

素数,又称质数,定义是:除了1和它本身以外不再有其他的除数整除。方法一按照定义,从2到n-1判断有没有能整除n的数。如果有,则不是素数,否则,是素数bool is_prime(int n){ if (n < 2){ return false; } int i; for (i = 2; i < n; i++){ if (n%i == 0)

long-long-ago 5万+

计算质数几种方法

南昌理工院ACM集训队 什么是质数 质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数. 查找某个数是否为素数 方法一: 根据定义,判断一个整数n是否是素数,只需要去判断在整数区间[2, n-1]之内,是否具有某个数m,使得n % m == 0。 代码: int isPrime(int n)//时间复杂度O(n) { int i; for (i = 2; i < n; ++i) { if (n % i == 0)

znxiaoqi275的博客 1万+

Java求素数质数)的几种方法

什么是素数质数)? 比1大的整数中,除了1和它本身以外,不再有别的因数,这种整数叫做质数素数 思想,怎么做才能高效? 要判断X是否为质数,就从2一直尝试到x-1的做法效率是最差的!其实只要从2一直尝试到√x,就可以了。因为因数都是成对出现的。比如,100的因数有:1和100,2和50,4和25,5和20,10和10。看出来没有?成对的因数,其中一个必然小于等于100的开平方,另一个大于...

Song_MJ的博客 4168

算法中的数质数素数

一个大于1的自然数,除了1和它自身外,不能被其他自然数整除,那么他就是质数,否则他就是合数。

2301_79954395的博客 1966

python实现求质数(素数)

python实现求质数(素数) 素数(质数):我们把公约数只有1和它本身的数字称为素数又称为质数,具体使用python的求法如下: num = [] # 定义一个空列表用来接收找到的符合条件的数字 for i in range(2, 101): k = 0 for j in range(1, i+1): if i % j == 0: k += 1 if k == 2: num.append(i) print(num) 方案2

Ministar的博客 6万+

素数质数)的两种求法(Python)

1.相关定义     质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。 2.代码实现 数方法:     对正整数n,如果用2到 √n 之间的所有整数去除,均无法整除,则n为质数。 # -*-coding=utf-8 -*- &amp;amp;amp;quot;&amp;amp;amp;quot;&amp;amp;amp;quot; name:maple183 date:2019.3.6 use:判断用户输

weixin_43043082的博客 1715

素数求法

一、素数的定义: 素数即为质数,一个数要是素数质数)的话,需要满足下列的条件 (1)大于 1 的正整数; (2)只能被 1 和自身整除; (3)最小的素数是 2 。 二、问题描述  输入一个值 n ,求出小于 n 值的所有素数 例子: 输入:20 输出:2  3  5  7  11  13  17  19  三、问题解决  思路1 试除法:将该数逐个和从 2 到...

weixin_42530160的博客 2851

素数几种求法

素数常见求法 1.普通求素数法 int IsPrimer(int x) { int i; if(x<2||x%2==0)//如果不加上x%2==0则i不能从3开始 return 0; if(x==2) return 1; for(i=3;i*i<n;i+=2) if(n%i==0) return 0; return 1; }

奋起的Coder。。。 1041

质数素数)的求法及相关例题

质数素数)的求法及相关例题 质数是什么? 质数素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 1-1000的质数表 代码: #include<stdio.h> #include<math.h> int main() { int m,n; scanf("%d%d",&m,&n); int i,j; int num=0; for(i=m; i<=n; i++) { for

yzl_007的博客 864

VFP趣味编程:素数质数)的求法

素数质数)的求法。若求N内的素数,可用N的平方根以内的素数倍数逐个筛掉,余下的便是所求的素数。源程序ex9_1.prg如下: SET TALK OFFINPUT "请输入自然数 N =" TO N??  "从1至"+STR(N)+"间的所以质数"l=0i=3DO WHILE iN  j=INT(SQRT(i))  k=3  DO WHILE kj    l=i-INT(i/k)*k   

cdbqss1的专栏 4739

判断素数几种求法

总结一下判断素数几种求法 素数的概念 素数及除了1和本身之外,不能被其他数整除的一类数,1既不是素数也不是合数 素数的判断 判断n是否能被2,3,…n-1中的一个整除,只有全部都不能被整除才能判断为,而只要其中一个可以被整除,就可以判断为非素数。 由于该算法的复杂度为o(n),而且求素数通常为整个程序中的一部分,故考虑进行优化 设数n在2-n-1中存在n的约数k,那么由于k*(n/k) ==n,...

weixin_43222033的博客 445

算法素数(质数)判断方法

素数(质数)的判断在算法问题中经常遇到,这里小结几种常用的判断方法。首先,我们来看一下素数(质数)的定义:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。我们可以从它的定义得到判断素数的 第一个方法: 从2到n - 1, 判断是否存在能被n整除的数,既(n%i == 0, 2 <= i <= n - 1),如果有就不是素数,否则为素数(这里为了比

锦瑟年华,逐梦之人 6万+
上一篇: 两个指针(位置)的妙用
下一篇: 逆序数的几种求法
dlengong
博客等级 码龄18年 25粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值