请编写一个函数rev(n),可以返回n的反序数。反序数是倒序每一位数得到的数,例如123反序数是321。再编写一个函数isprime(n),可以判断n是否为素数,是则返回True,不是则返回False。利用这两个函数找出三位数中所有的对称素数。对称素数是一对不同的反序数同为素数,例如107和701。一行显示一对对称素数,按前小后大的顺序显示,以1个空格分隔两个数,不要重复显示。
时间: 2023-06-16 21:03:51 浏览: 181
可以按照以下方式实现:
```python
def rev(n):
return int(str(n)[::-1])
def isprime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
for i in range(100, 1000):
r = rev(i)
if r > i and isprime(i) and isprime(r):
print(i, r)
```
这个程序首先定义了两个函数`rev`和`isprime`,分别用于求反序数和判断素数。然后程序对所有三位数进行遍历,对于每个数,如果它的反序数大于它自己并且它本身和反序数都是素数,那么就输出这一对对称素数。注意输出时需要按前小后大的顺序,因此要判断反序数是否大于原数。另外,由于对称素数是一对不同的反序数同为素数,因此只需要输出其中一个就可以了,不要重复显示。
相关问题
⑴ 编写函数int rev_prime(int m,int n,int x[]),求区间m到n中的所有整数的反序数,将反序数中的素数存入数组x中,函数的返回值是素数的个数。 反序数:将原数各位数字颠倒后的数,例如:123的反序数为321,70的反序数为7。 ⑵ 编写main函数,接收从键盘输入的m和n的值,调用函数reverse求m到n之间的所有元素的反序数中的素数,将结果数组按以下要求写到输出文件“out.txt”中。
⑴ 反序数和判断素数的函数实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 判断素数
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
// 计算反序数中的素数
int rev_prime(int m, int n, int x[]) {
int count = 0;
for (int i = m; i <= n; i++) {
int temp = i, rev_num = 0;
while (temp) {
rev_num = rev_num * 10 + temp % 10;
temp /= 10;
}
if (is_prime(rev_num)) {
x[count++] = rev_num;
}
}
return count;
}
```
⑵ main 函数实现:
```c++
#include <fstream>
#include <cstring>
int main() {
int m, n;
cin >> m >> n;
int x[n - m + 1];
int count = rev_prime(m, n, x);
ofstream fout("out.txt");
for (int i = 0; i < count; i++) {
fout << x[i] << " ";
}
fout.close();
return 0;
}
```
完整代码如下:
⑴ 用c语言编写函数int rev_prime(int m,int n,int x[]),求区间m到n中的所有整数的反序数,将反序数中的素数存入数组x中,函数的返回值是素数的个数。 反序数:将原数各位数字颠倒后的数,例如:123的反序数为321,70的反序数为7。 ⑵ 编写main函数,接收从键盘输入的m和n的值,调用函数reverse求m到n之间的所有元素的反序数中的素数,将结果数组按以下要求写到输出文件“out.txt”中。
以下是实现该功能的代码:
```
#include <stdio.h>
#include <math.h>
/* 判断一个数是否为素数 */
int is_prime(int n){
int i;
if(n < 2) return 0;
for(i = 2; i <= sqrt(n); i++){
if(n % i == 0) return 0;
}
return 1;
}
/* 反转一个整数 */
int reverse(int n){
int rev = 0;
while(n > 0){
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
/* 求区间m到n中所有整数的反序数中的素数 */
int rev_prime(int m, int n, int x[]){
int i, count = 0;
for(i = m; i <= n; i++){
int rev = reverse(i);
if(is_prime(rev)){
x[count] = rev;
count++;
}
}
return count;
}
int main(){
int m, n, x[100], i, count;
printf("请输入m和n的值:");
scanf("%d%d", &m, &n);
count = rev_prime(m, n, x);
FILE *fp;
fp = fopen("out.txt", "w");
fprintf(fp, "区间[%d, %d]中反序数中的素数有:%d个\n", m, n, count);
fprintf(fp, "分别是:");
for(i = 0; i < count; i++){
fprintf(fp, "%d ", x[i]);
}
fclose(fp);
printf("结果已写入文件out.txt中!\n");
return 0;
}
```
运行程序后,输入m和n的值,程序将在区间[m, n]中求出所有整数的反序数中的素数,并将结果写入out.txt文件中。
阅读全文