(1)定义函数 char prime(int n),判断n是否素数,若是返回1, 否则返回0; (2)定义函数 unsigned int input uint(O输入一个不小于2的无符 号正整数,并返回该数值;若不符合,则重新输入直至输入数据合法; (3)定义函数void get2int(unsigned nl2[2]),调用(2)的函数取得 两个正整数n1,n2,使得n12[1]=n1+n2、n12[0]=n1; + (4)定义函数printa(unsigned prims[][2],n),可以按行打印输出二 维数组的值。 (5)定义主函数main(),调用前述的函数查找指定整数区间内的孪生 素数对,并统计孪生素数的组数,保存到一个二维数组中primes[][2],然后 (6)要求除主函数之外的所有函数保存在sub.c文件中,主程序(函 数)保存在tprimes.c文件中。
时间: 2024-02-13 10:00:00 浏览: 118
原型的函数prime,用来判断整数n是否为素数
sub.c文件中的函数实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 判断一个数是否为素数
char prime(int n) {
if (n == 2 || n == 3) return 1;
if (n <= 1 || n % 2 == 0) return 0;
for (int i = 3; i * i <= n; i += 2) {
if (n % i == 0) return 0;
}
return 1;
}
// 输入一个不小于2的无符号正整数
unsigned int input_uint() {
unsigned int n;
do {
printf("Please input an integer greater than or equal to 2: ");
scanf("%u", &n);
} while (n < 2);
return n;
}
// 获取两个正整数n1,n2,使得n12[1]=n1+n2、n12[0]=n1
void get2int(unsigned int n12[2]) {
do {
n12[0] = input_uint();
n12[1] = input_uint();
} while (n12[1] - n12[0] != n12[0] && n12[1] - n12[0] != n12[0] * 2);
}
// 按行打印输出二维数组的值
void printa(unsigned int primes[][2], int n) {
for (int i = 0; i < n; i++) {
printf("%u %u\n", primes[i][0], primes[i][1]);
}
}
```
tprimes.c文件中的主函数实现如下:
```c
#include <stdio.h>
#include "sub.h"
int main() {
unsigned int n12[2], n1, n2;
int count = 0; // 统计孪生素数的组数
unsigned int primes[1000][2]; // 保存孪生素数对
printf("Please input two integers n1 and n2 (n1 < n2):\n");
get2int(n12);
n1 = n12[0], n2 = n12[1];
for (unsigned int i = n1; i <= n2 - 2; i++) {
if (prime(i) && prime(i + 2)) {
primes[count][0] = i;
primes[count][1] = i + 2;
count++;
}
}
printf("There are %d twin prime pairs in [%u, %u]:\n", count, n1, n2);
printa(primes, count);
return 0;
}
```
阅读全文