1. 程式人生 > >窮舉法思想(素數)

窮舉法思想(素數)

窮舉法(Exhaustive Attack method),又稱為強力法(Brute-force method),它是一種最為直接,實現最為簡單,同時又最為耗時的一種解決實際問題的演算法思想。

基本概念

窮舉法的基本思想是:在可能的解空間中窮舉出每一種可能的解,並對每一個可能解進行判斷,從中篩選出問題的答案。

使用窮舉法解決實際問題,最關鍵的步驟是劃定問題的解空間,並在該空間中一一枚舉出每一個可能的解。

有兩點必須注意,

一是解空間的劃定必須保證在覆蓋問題的全部解。如果解空間的集合用A表示,問題的解用a來表示,只有當a包含於A才能使用窮舉法求解。

二是解空間集合及問題的解集一定是離散的集合,也就是集合中元素是可列的,有限的。

窮舉法是犧牲時間還來了解的全面性保證,因此窮舉法的優勢在於確保得到了全部的解,而瓶頸在於它的效率十分低下。但是窮舉法的思想簡單,易實現,在解決一些規模不大的問題上,使用窮舉法是十分有效的。

例題

尋找[1,100] 之間的素數

程式碼樣式

#include<stdio.h>
int ispreme(int n)/*判斷n是否為素數,如果是返回1,不是返回0*/
{
	int i;
	for (i = 2; i < n; i++)
	{
		if (n%i == 0)
			return 0;
	}
	return 1;
}
void getptreme(int low, int high)/*尋找[low,high]之間的素數 */
{
	int i;
	for (i = low; i <= high; i++)
	{
		if (ispreme(i))
		{
			printf("%d\t", i);/*如果是素數,就打印出來*/
		}
	}
}
int main()
{
	int low, high;
	printf("please input the domain for searvching prime\n");
	printf("the low\n");
	scanf_s("%d", &low);
	printf("the high\n");
	scanf_s("%d", &high);
	getptreme(low, high);
}