窮舉法思想(素數)
阿新 • • 發佈:2018-12-21
窮舉法(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); }