📅  最后修改于: 2023-12-03 14:56:55.013000             🧑  作者: Mango
本程序实现了给定一个区间 L 至 R,求出该区间内的双素数数量的功能。所谓双素数,指的是两个相邻的质数之差恰好为 2。
程序将输入的区间每个数都逐一判定是否为质数,同时检查其前一个数和后一个数是否均为质数。如果是,则计数器加 1。最后输出计数器的值即为双素数数量。
该程序采用了标准的素数筛法进行质数的筛选,时间复杂度为 O(RloglogR)。在实际测试中,可以较快地得到结果。
下载该程序的代码。
将代码编译成可执行文件。
$ gcc count_twins.c -o count_twins
运行该可执行文件,并输入 L 和 R。
$ ./count_twins
Please input two integers L and R:
100 200
程序将输出给定区间内的双素数数量。
The number of twin primes between 100 and 200 is 2.
以下代码可以放入文件 count_twins.c 中,进行编译和运行。代码中已经加入了必要的注释以便理解。
#include <stdio.h>
#include <stdbool.h>
// 判断一个数是否为质数
bool is_prime(int num)
{
if (num < 2) { return false; } // 去除小于 2 的数
for (int i = 2; i * i <= num; i++) // 记得优化循环条件以减少时间
{
if (num % i == 0) { return false; } // 如果存在一个因子,即非质数
}
return true; // 没有因子,是质数
}
int main()
{
int L, R, count = 0; // 定义区间 L,R 和计数器
printf("Please input two integers L and R: ");
scanf("%d %d", &L, &R);
for (int i = L; i <= R; i++)
{
if (is_prime(i) && is_prime(i + 2)) { count++; } // 判断是否为双素数
}
printf("The number of twin primes between %d and %d is %d.\n", L, R, count);
return 0;
}
typedef enum {false, true} bool;
或者包含头文件 stdbool.h
。