c语言2.3编写一个函数,判断一个正整数(大于3的正整数)是否是素数,是素数返回1,不是素数返回0。并编写一个简单的程序测试该函数的正确性
时间: 2023-07-15 15:13:51 浏览: 97
以下是一个判断素数的函数实现:
```c
int is_prime(int n) {
if (n <= 3) {
return n > 1;
}
if (n % 2 == 0 || n % 3 == 0) {
return 0;
}
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return 0;
}
}
return 1;
}
```
该函数的实现使用了著名的 Miller-Rabin 素性测试算法。具体而言,对于一个大于3的正整数 n,先判断 n 是否小于等于 1,若是,返回0;若 n 等于 2 或 3,返回1。然后,判断 n 是否能被 2 或 3 整除,若是,返回 0。最后,从 5 开始,每次增加 6,判断 n 是否能被 5、7、11、13、17 等 6k±1 形式的数整除,若存在这样的数,则 n 不是素数,返回 0;否则,n 是素数,返回 1。
下面是一个测试函数的实现:
```c
#include <stdio.h>
int is_prime(int n);
int main() {
int n;
printf("请输入一个大于3的正整数:");
scanf("%d", &n);
if (is_prime(n)) {
printf("%d是素数。\n", n);
} else {
printf("%d不是素数。\n", n);
}
return 0;
}
int is_prime(int n) {
if (n <= 3) {
return n > 1;
}
if (n % 2 == 0 || n % 3 == 0) {
return 0;
}
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return 0;
}
}
return 1;
}
```
测试结果:
```
请输入一个大于3的正整数:17
17是素数。
```
阅读全文