在C语言中判断一个数是否为质数,可以采用以下几种方法:
穷举法
从2开始逐个判断该数是否能被2到该数减1之间的数整除。如果存在能整除的数,则该数不是质数;如果不存在能整除的数,则该数是质数。
代码示例:
```c
include int main() { int num; printf("请输入一个正整数: "); scanf("%d", &num); for (int i = 2; i < num; i++) { if (num % i == 0) { printf("%d不是质数\n", num); return 0; } } printf("%d是质数\n", num); return 0; } ``` 只需判断从2到该数的平方根之间的所有数,因为如果一个数有大于其平方根的因数,那么它必定还有一个小于或等于其平方根的因数。 代码示例: ```c include include int main() { int num; printf("请输入一个正整数: "); scanf("%d", &num); for (int i = 2; i <= sqrt(num); i++) { if (num % i == 0) { printf("%d不是质数\n", num); return 0; } } printf("%d是质数\n", num); return 0; } ``` 先将2到该数之间的所有数标记为质数,然后从2开始,将每个质数的倍数标记为合数,直到遍历完2到该数的所有数,剩下的未标记的数即为质数。 代码示例(简化版): ```c include include int main() { int num; printf("请输入一个正整数: "); scanf("%d", &num); bool is_prime[num + 1]; for (int i = 2; i <= num; i++) { is_prime[i] = true; } for (int i = 2; i * i <= num; i++) { if (is_prime[i]) { for (int j = i * i; j <= num; j += i) { is_prime[j] = false; } } } if (is_prime[num]) { printf("%d是质数\n", num); } else { printf("%d不是质数\n", num); } return 0; } ``` 随机选取一个小于该数的整数a,计算a^(该数-1) % 该数的结果,如果结果等于1,则该数可能是质数;如果结果不等于1,则该数一定不是质数。 代码示例: ```c include include include int main() { int num; printf("请输入一个正整数: "); scanf("%d", &num); srand(time(NULL)); int a = rand() % (num - 1) + 1; int result = 1; for (int i = 0; i < num - 1; i++) { result = (result * a) % num; if (result == 1) { printf("%d可能是质数\n", num); return 0; } } printf("%d不是质数\n", num); return 0; } ``` 将该数减1写成2^k * m的形式,其中k和m都是整数且m是奇数,随机选取一个小于该数的整数a,计算a^m % 该数的结果,优化穷举法
埃氏筛法
费马检测法
米勒-拉宾素数测试法