判断一个数是否为素数是一个基本的数学问题,编写一个函数 isprime
来实现这个功能。下面提供一个专业的、优化的C语言代码示例,该函数接收一个整数参数 a
,如果 a
是素数则返回1,否则返回0。
函数实现
#include <stdio.h>
#include <math.h>// 函数声明
int isprime(int a);// 主函数用于测试
int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);if (isprime(num)) {printf("%d 是素数\n", num);} else {printf("%d 不是素数\n", num);}return 0;
}// 判断素数的函数实现
int isprime(int a) {if (a <= 1) {return 0;}if (a == 2 || a == 3) {return 1;}if (a % 2 == 0 || a % 3 == 0) {return 0;}for (int i = 5; i <= sqrt(a); i += 6) {if (a % i == 0 || a % (i + 2) == 0) {return 0;}}return 1;
}
代码详解
-
函数声明
int isprime(int a);
声明
isprime
函数,该函数接收一个整数参数并返回一个整数(1表示素数,0表示非素数)。 -
主函数
int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);if (isprime(num)) {printf("%d 是素数\n", num);} else {printf("%d 不是素数\n", num);}return 0; }
在主函数中,首先从用户处读取一个整数,然后调用
isprime
函数进行判断,并根据返回值输出相应的结果。 -
判断素数的函数实现
int isprime(int a) {if (a <= 1) {return 0;}if (a == 2 || a == 3) {return 1;}if (a % 2 == 0 || a % 3 == 0) {return 0;}for (int i = 5; i <= sqrt(a); i += 6) {if (a % i == 0 || a % (i + 2) == 0) {return 0;}}return 1; }
-
初步判断:
if (a <= 1)
: 1及以下的数都不是素数。if (a == 2 || a == 3)
: 2和3是最小的两个素数。if (a % 2 == 0 || a % 3 == 0)
: 排除所有能被2或3整除的数。
-
优化的判断循环:
- 从5开始,每次循环增加6,并检查
a
是否能被i
或i+2
整除。这是因为所有素数可以表示为6k±1(其中k是整数)。 - 只需要检查到
sqrt(a)
,因为一个大于sqrt(a)
的数的因子必须小于sqrt(a)
。
- 从5开始,每次循环增加6,并检查
-