You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现输出指定位数反转素数对的C语言程序

反转素数对程序实现求助

问题定义

一个数与其反转数组成数对,若两者均为素数,则称为反转素数对。例如,13和31是两位数反转素数对,107和701是三位数反转素数对。

程序需求

编写程序,输出所有n(2≤n≤5)位的反转素数对:

  • 若输入的n小于2或大于5,输出"Wrong input."并终止程序;
  • 输出时每5对换一行,且仅输出第一个数小于第二个数的数对。

示例

  • 输入:1 → 输出:Wrong input.
  • 输入:3 → 输出:
(107,701)(113,311)(149,941)(157,751)(167,761)
(179,971)(199,991)(337,733)(347,743)(359,953)
(389,983)(709,907)(739,937)(769,967)
There are 14 results.

当前状态与已有代码

我已经掌握了判断单个反转素数的方法,但不清楚如何完成整个程序,附上已写的代码,寻求实现提示:

#include <stdio.h>
 

int checkPrime(int n) {  
  int i, isPrime = 1;  
  
  if (n == 0 || n == 1) {  
    isPrime = 0;  
  }  
  else {  
    for(i = 2; i <= n/2; ++i) {  
      if(n % i == 0) {  
        isPrime = 0;  
        break;  
      }  
    }  
  }  
  
  return isPrime;  
}  
int main (void)
{
    int a, reverse = 0, remainder, flag=0;
    scanf("%d",&a);
    int temp = a;
    while (temp!=0) {
        remainder = temp%10;
        reverse = reverse*10 + remainder;
        temp/=10;
    }
    if (checkPrime(a)==1)  {
        if (checkPrime(reverse)==1){
            printf("YES\n");
            flag=1;
        }
    }
    if (flag==0)
    printf("NO\n");
    }

实现提示

  1. 输入合法性校验:在main函数开头先读取n,判断n是否在2到5之间,若不在直接输出"Wrong input.",然后用return 0;终止程序。
  2. 确定遍历区间:计算n位数的起始值(比如n=2时是10,n=3时是100,公式为start = pow(10, n-1),或用循环计算)和结束值(end = pow(10, n) - 1),遍历从start到end的每个数。
  3. 过滤无效反转数:计算当前数的反转数后,检查反转数是否也是n位数(比如n=2时反转数不能小于10),如果不是直接跳过。
  4. 避免重复数对:只有当当前数 < 反转数时,才判断两者是否都是素数,避免重复输出同一对的两种顺序。
  5. 素数判断优化:把checkPrime函数的循环上限改成sqrt(n),大幅减少循环次数提升效率(需引入math.h头文件,或自行计算平方根)。
  6. 输出格式控制:用计数器统计符合条件的数对数量,每输出5对就换行;全部输出完成后,打印总数,格式为There are X results.。

内容的提问来源于stack exchange,提问作者123krikit krukut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:35:18