C语言通过函数实现素数验证
素数验证的原理
素数是大于1的自然数,除了1和它本身外没有其他约数。验证一个数是否为素数,只需检查它是否能被2到其平方根之间的任何整数整除。
方法一:基础遍历法
通过遍历2到n-1之间的所有整数,检查n是否能被其中任何一个整除。若存在整除情况,则n不是素数。
#include <stdbool.h>
#include <math.h>bool isPrime(int n) {if (n <= 1) return false;for (int i = 2; i < n; i++) {if (n % i == 0) return false;}return true;
}
方法二:优化遍历法
检查范围缩小到2到√n,因为若n有大于√n的因数,必然对应一个小于√n的因数。
#include <stdbool.h>
#include <math.h>bool isPrime(int n) {if (n <= 1) return false;for (int i = 2; i <= sqrt(n); i++) {if (n % i == 0) return false;}return true;
}
方法三:进一步优化
跳过偶数检查,因为除了2以外,偶数都不是素数。
#include <stdbool.h>
#include <math.h>bool isPrime(int n) {if (n <= 1) return false;if (n == 2) return true;if (n % 2 == 0) return false;for (int i = 3; i <= sqrt(n); i += 2) {if (n % i == 0) return false;}return true;
}
使用示例
#include <stdio.h>int main() {int num;printf("Enter a number: ");scanf("%d", &num);if (isPrime(num)) {printf("%d is a prime number.\n", num);} else {printf("%d is not a prime number.\n", num);}return 0;
}
注意事项
- 输入验证:确保输入为正整数,避免负数或零导致错误结果。
- 性能考虑:对于大数验证,优化方法显著提升效率。
- 预计算:频繁验证时,可预先生成素数表以空间换时间。
