求素数的方法有很多种,以下是一些常用的算法:
试除法
基本思路:从2开始,遍历到给定数字的平方根,检查该数字是否能被遍历到的任何数字整除。如果能被整除,则该数字不是素数;如果遍历结束后都没有找到能整除的数字,则该数字是素数。
代码示例(C语言):
```c
include include int is_prime(int n) { if (n <= 1) return 0; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return 0; } return 1; } int main() { int start = 100; int end = 200; for (int num = start; num <= end; num++) { if (is_prime(num)) { printf("%d ", num); } } return 0; } ``` 基本思路:创建一个从2到n的列表,标记所有数字为素数,然后从2开始,将它的所有倍数标记为非素数,接着找到下一个未被标记的数字,将其标记为素数,并将其所有倍数标记为非素数,如此循环直到遍历完所有数字。 代码示例(C语言): ```c include include include void sieve_of_eratosthenes(int n) { bool is_prime[n + 1]; memset(is_prime, true, sizeof(is_prime)); is_prime = is_prime = false; for (int i = 2; i * i <= n; i++) { if (is_prime[i]) { for (int j = i * i; j <= n; j += i) { is_prime[j] = false; } } } for (int i = 2; i <= n; i++) { if (is_prime[i]) { printf("%d ", i); } } } int main() { int n = 200; sieve_of_eratosthenes(n); return 0; } ``` 基本思路:这是一种概率性算法,通过随机选择基数并进行一系列模运算来判断一个数字是否为素数。虽然它是概率性的,但通过多次测试可以提高准确性。 代码示例(C语言):埃拉托斯特尼筛法
米勒-拉宾素性测试