如何实现检查数组中每个元素是否为质数的程序?
解决数组元素的质数判断问题
嘿,我来帮你把单个数值的质数判断功能扩展到数组上,顺便先修正一下你现有代码里的小问题——你提到它只适用于8以内的数字,确实是因为当前的质数判断逻辑不够完整,咱们一步步来:
第一步:修复单个数值的质数判断逻辑
你现在的函数只检查了是否为偶数或者小于2,但像9、15这类奇数合数就会被误判为质数。正确的质数判断应该要检查从2到sqrt(value)之间的所有数是否能整除它,这样才能准确判断所有大于2的数。
修复后的isElementPrime函数应该是这样的:
#include <stdio.h> #include <math.h> // 需要用到sqrt函数 // 返回1表示是质数,0表示不是,同时打印结果 int isElementPrime(int value) { if (value < 2) { printf_s("Number %d is not prime\n", value); return 0; } if (value == 2) { printf_s("Number %d is prime\n", value); return 1; } // 检查偶数 if (value % 2 == 0) { printf_s("Number %d is not prime\n", value); return 0; } // 检查从3到sqrt(value)的奇数 for (int i = 3; i <= sqrt(value); i += 2) { if (value % i == 0) { printf_s("Number %d is not prime\n", value); return 0; } } printf_s("Number %d is prime\n", value); return 1; }
第二步:扩展到数组的处理
要处理数组很简单,只需要在main函数里定义数组,然后用循环遍历数组的每一个元素,逐个调用上面的判断函数就可以了。比如:
int main() { // 定义一个示例数组 int numbers[] = {2, 3, 4, 9, 11, 15, 17, 20}; // 计算数组的元素个数:总字节数 / 单个元素字节数 int arraySize = sizeof(numbers) / sizeof(numbers[0]); printf_s("Checking each element in the array:\n"); // 遍历数组 for (int i = 0; i < arraySize; i++) { isElementPrime(numbers[i]); } return 0; }
代码运行结果
上面的代码运行后会输出:
Checking each element in the array:
Number 2 is prime
Number 3 is prime
Number 4 is not prime
Number 9 is not prime
Number 11 is prime
Number 15 is not prime
Number 17 is prime
Number 20 is not prime
这样就完美实现了数组元素的逐个质数判断啦!
内容的提问来源于stack exchange,提问作者R.Weels
相关产品推荐
相关产品推荐

