C语言除1和它本身外,不能被其它整数整除的正整数称为素数(注: 1不是素数,2是素数)。若两素数之差为2,则称两素数为双胞胎数,问[31, 701]之间有多少对双胞胎数。
时间: 2023-06-18 17:07:47 浏览: 180
这是一个经典的素数问题,可以使用试除法来解决。
首先,先编写一个判断一个数是否为素数的函数:
```c
int is_prime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
```
然后,我们可以使用一个循环来遍历[31, 701]之间的所有数,如果是素数,再判断它前一个数是否也是素数,如果是,就统计一对双胞胎数。
```c
int count_twins() {
int count = 0;
for (int i = 31; i <= 701; i++) {
if (is_prime(i) && is_prime(i - 2)) {
count++;
}
}
return count;
}
```
最后,调用 `count_twins()` 函数即可得到[31, 701]之间的双胞胎数对数。
完整代码如下:
```c
#include <stdio.h>
int is_prime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int count_twins() {
int count = 0;
for (int i = 31; i <= 701; i++) {
if (is_prime(i) && is_prime(i - 2)) {
count++;
}
}
return count;
}
int main() {
int count = count_twins();
printf("There are %d twin prime pairs between 31 and 701.\n", count);
return 0;
}
```
阅读全文