求一下这个程序的算法

键盘接收两个正整数,输出它们之间的最大6个回文素数。要求每行输出两个数。如果不足6个,要报告实际个数的程序

先写一个判断回文数的函数
再写一个判断素数的函数
接收两个数mn,判断大小,让大的在前
然后从大到小的循环,判断是否是回文数且素数,如果是,输出,并count++
判断如果count==6就break
如果count<6,输出count


import java.util.*;

class Testmethod {
    public boolean testsushu(int numbers) {
        for (int i = 2; i <= numbers / 2; i++) {
            if (numbers % i == 0) {
                return false;
            }
        }
        return true;
    }

    public boolean testhuiwenshu(int numbers) {
        int x = 0;
        int code = 0;
        if (numbers < 10) {
            return true;
        }
        while (numbers > x) {
            x = x * 10 + numbers % 10;
            numbers /= 10;
            code++;
        }
        if (code % 2 != 0) {
            if (x == numbers) {
                return true;
            } else {
                return false;
            }
        } else {
            if (x / 10 == numbers) {
                return true;
            } else {
                return false;
            }
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = 0;
        int b = 0;
        int count = 0;
        a = sc.nextInt();
        b = sc.nextInt();
        Testmethod test = new Testmethod();
        for (int i = b; i >= a; i--) {
            if (test.testsushu(i) && test.testhuiwenshu(i)) {
                System.out.println(i);
                count++;
            }
            if (count%2 == 0){
                System.out.println("\r");
            }
            if (count  == 6){
                break;
            }
        }
        if (count  < 6) {
            System.out.println(a + "~" + b + "之间只有" + count + "个符合要求!");
        }
    }
}



可以先获取输入的两个正整数,然后逆序遍历这两个正整数之间的所有整数,然后依次对每一个数判断是否是素数与回文数,如果都是的且符合要求的数不足6个,则累加到存储结果的数组中,然后计数个数,然后判断完所有的数,分情况打印结果即可,代码如下:

参考链接:


https://qb.zuoyebang.com/xfe-question/question/866bbf7eb0a3f1accecf7156799291c2.html

https://zhuanlan.zhihu.com/p/277572883


#include <stdio.h>

// 判断是否是素数 
int prime(int n){
    
    int i;
    if(n<2){
        return 0;
    }
    
    for(i=2;i<n;i++){
        if(n%i==0){
            return 0;
        }
    }
    
    return 1;
} 


// https://zhuanlan.zhihu.com/p/277572883  
// 判断是否是回文数 
int palindrome(int num){
    
    int n,m=0;
    int s = num;
    while(s!=0)
    {
        n = s%10;   //n是s的末位数
        m = m*10 +n; //把s的末位数放到m的末位
        s = s/10;  //去掉末位数的新s
    }
    if(num==m){
        return 1;
    }else{
        return 0;
    }
}


int main(void){
    
    int result[6];
    int m,n,i,num=0;
    printf("请输入两个正整数:");
    scanf("%d%d",&m,&n);
    
    for(i=n;i>=m;i--){ // 从大到小逆序遍历两个正整数之间所有的数 
        
        // 如果当前的数既是素数又是回文数,则计数+1,且如果将前6个满足要求的数存储到数组中 
        if(prime(i)==1&&palindrome(i)==1){
            if(num<6){
                result[num]=i;
            }
            num++;
        }
    }
// https://qb.zuoyebang.com/xfe-question/question/48fafd5672360351ce605750d0478b6a.html    
// https://baike.baidu.com/item/%E5%9B%9E%E6%96%87%E6%95%B0/1830170?fr=aladdin
// 打印结果 
    if(num>=6){
        for(i=0;i<6;i+=2){
            printf("%d %d\n",result[i],result[i+1]);
        }
    }else{
        printf("%d到%d之间素数的个数是:%d\n",m,n,num);
    }
    
    return 0;
}

img