[the summarization of algorithm]How to list the prime number

In order to get the list of prime number, I find some ways to do that.


素数判定法:

1、朴素的方法:

#include<stdio.h>

bool isprime(int n);//判断是否是质数的函数

int main()
{
	int n;
	scanf("%d",&n);
	if(isprime(n))
		printf("%d is a prime.\n",n);
	else
		printf("%d isn't a prime.\n",n);
	return 0;
}

bool isprime(int n)
{
	int i;
	for(i = 2;i < n; i++)//原理:利用质数的定义:质数是只能被1和其本身整除的数
	{
		if(n % i == 0)
			break;
	}
	if(i == n)
		return true;
	else
		return false;
}

复杂度:o(n)


2、对朴素的方法的一阶优化:
bool isprime(int n)
{
	int i;
	for(i = 2;i < n/2; i++)//一阶改进原理:只要2至n/2之间的数都不能被n整除,那么n就是质数(因为n/(n/2) = 2,n/((n/2)+k)<2)(k>0)
	{
		if(n % i == 0)
			break;
	}
	if(i == n/2)
		return true;
	else
		return false;
}

复杂度:o(n/2)


3、对朴素的方法的二阶优化:

bool isprime(int n)
{
	int i;
	for(i = 2;i <= (int)sqrt((double)n); i++)//改进原理:只要2至根号n之间的数不能被n整除,n即为质数。
	{
		if(n % i == 0)
			break;
	}
	if(i == (int)sqrt((double)n)+1)
		return true;
	else
		return false;
}
原理:若n(n∈N,n>1)不能被小于根号n的所有质数整除,则n为质数。
复杂度: O(sqrt(n))
解释:非质数都可以分解为更小的质数乘积的形式,至于为什么是根号n,因为假如x=ab的话,那么ab一定一个小于等于根号另一个大于等于,所以a>根号n的时候b一定<根号n,所以到根号就相当于把所有可能的a都测试过一遍了。

4、埃拉托色尼筛选法(The sieve of Eratosthenes)

埃拉托色尼选筛法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。 是针对自然数列中的自然数而实施的,用于求一定范围内的质数。

步骤:1)先把1删除(现今数学界1既不是质数也不是合数)

   2)读取2,并把2的倍数删除

   3)读取3,并把3的倍数删除

   4)读取5,并把5的倍数删除(4是2的倍数,在第2步已经被删除)

   5)如上所述,直到所需范围你所有数字被读取过

Sieve of Eratosthenes

#include<stdio.h>
#include<stdlib.h>
#define N 1000     //N以内的素数表
int main()
{
	bool chart[N+1];
	for(int i = 2;i<N;i++)
	{
		if(chart[i])
			for(int j = 2*i;j<N;j+=i)
				chart[j] = false;
	}
	for(int i = 2;i<N;i++)
	{
		if(chart[i])
			printf("%d\n",i);
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值