1. 程式人生 > 其它 >計算機網路⑤應用層:HTTP協議

計算機網路⑤應用層:HTTP協議

質數(prime number)又稱素數,有無限個。
質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。
除了1和它自身外,不能被其他自然數整除的數叫做質數;否則稱為合數。
任意大於等於5的素數都與6的倍數相鄰。
如果n是一個合數,那麼n一定有一個不超過sqrt(n)的素因子。
判斷一個數是否是素數的思路
在一般領域,對正整數n,如果用2到sqrt(n)之間的所有整數去除,均無法整除,則n為質數。
方法一

bool isprime(int x)
{
	for (int i=2;i<x;i++)
	{
		if (x%i==0) return false;
	}
	return true;
}

方法二

bool isprime(int x)
{
	for (int i=2;i*i<=x;i++)
	{
		if (x%i==0) return false;
	}
	return true;
}

篩素數法

篩素數法可以比列舉法節約極大量的時間(n為所求最大值,m為≤n的質數個數,那麼列舉需要O(m*n)的時間複雜度,而篩素數法為O(m+n),顯然m<<n,所以時間效率有很大提升。)。如1000000的資料範圍,用篩素數法可在2s內解決。
思路:建立一個bool型陣列M,若已知一個數M[k]是質數,那麼其i(i為正整數)倍M[k*i]必然為合數,可將其去除。

bool Isprime[Maxn];
void prime(int x)
{
	memset(Isprime,true,sizeof(Isprime));
	Isprime[1]=0;
	for (int i=2;i<=x;i++)
	{
		for (int j=2;i*j<=x;j++) Isprime[i*j]=0;
	}
	return;
}