原题链接:哥德巴赫曾猜测
解题思路:
注意事项:
参考代码:
#include<stdio.h>
#include<math.h> // 引入数学库,用于sqrt函数
int main()
{
int positive_even_number;
scanf("%d", &positive_even_number);
if (positive_even_number < 4) { // 如果输入的正偶数小于4,则无法形成素数对
printf("0\n");
return 0;
}
int nums[10000] = { 0 };
nums[0] = 2;
int len = 1;
for (int i = 3; i < positive_even_number; i += 2) { // 只检查奇数,因为偶数除了2都不是素数
int isprime = 1;
for (int j = 3; j <= sqrt(i); j += 2) { // 只检查到sqrt(i),且只检查奇数
if (i % j == 0) {
isprime = 0;
break;
}
}
if (isprime == 1) {
nums[len++] = i;
}
}
// 打印数组nums[](可选)
// for (int i = 0; i < len; i++) {
// printf("%d,", nums[i]);
// }
// printf("\n");
int kind = 0;
for (int i = 0, j = len - 1; i < j; i++) { // 注意这里j的初始化在循环外部,且i<j
while (j > i && nums[i] + nums[j] > positive_even_number) {
j--;
}
if (nums[i] + nums[j] == positive_even_number) {
kind++;
}
}
// 注意:如果positive_even_number是4,则输出应为1(2+2),但在此逻辑下不会检查相同的数
// 如果需要包括相同数的情况,可以在检查前额外添加一行代码:
// if (positive_even_number % 2 == 0 && positive_even_number / 2 == 2) kind++;
printf("%d\n", kind);
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复