zoj 1457 求素數環

2021-06-06 12:57:25 字數 702 閱讀 4313

題目大意:是求乙個素數環

解題思路:簡單的dfs,卡在求最後乙個數,它不光與1相加為素數和後面的那個數相加也得為素數,漏了後面那個,wa了好幾次。

另外要是n為奇數不能成為素數環,因為奇數的個數比偶數多乙個,所以至少會有一對相鄰的兩個數是奇數,這兩個數的和不可能是素數。

#include #include #include #include using namespace std;

const int maxn = 21;

int result[maxn];

bool hash[maxn];

int n;

void dfs(int depth);

inline bool isprim(int num);

int main()

memset(hash, 0, sizeof(hash));

result[0] = 1;

hash[1] = true;

dfs(1);

printf("\n");

}return 0;

}void dfs(int depth)}}

return;

}for(int i = 2; i <= n; i++)}}

}inline bool isprim(int num)

return true;

}

素數篩法求素數

素數篩類似於打表標記,預先處理掉非素數的數,即素數的倍數 任意非素數都可以由幾個素數相乘得到 於是效率比暴力求解快得多。埃氏篩法的效率為o n loglog n 簡單易懂,但是會重複標記,比如當i為2時,6會被標記掉,然而當i為3時,6又會被重複標記,這樣的重複訪問加大了時間複雜度,於是有了尤拉篩。...

如何求素數

1。自然數是0,1,2 2。素數是2,3,5 不包括1的只能背1和它本身整除的自然數 public class test s i system.out.println 第 i 個素數是 n return s public static void main string args 求10000以內的所...

求素數問題

源 為 includevoid main if k 0 cout include void main if flag 如果執行這個if語句,說明flag為1,也即是說,上面的for迴圈中的if語句一直沒有被執行到,即這個數是素數,那麼,就可以把它輸出了 printf d n a 這裡很重要的就是br...