怎么求闭区间内回文素数的个数啊!用循环结构程序设计

13.[程序题]
回文素数
题目描述
回文素数是一个顺序读与逆序读都相同的素数,如5,11,131是回文素数,121是回文数但不是素数,所以121不是回文素数,31是素数但不是回文 ,所以31不是回文素数。
现在给出两个整数a,b(1<=a<=b<=1000000),要你求出在闭区间a,b内有多少回文素数。
输入
有多组测试数据,每组测试数据输入两个正整数a,b(1<=a<=b<=1000000)
当a,b都为0时表示输入结束,你不需要处理这组数据。
输出
每组测试数据输出[a,b]区间内的回文素数的总数,每组输出占一行。
样例输入
1 10
10 11
0 0
样例输出
4
1
提示: 先判断回文, 再判断素数

基于new bing的编写,参考学习:

img

#include <stdio.h>
#include <stdbool.h>

bool isPrime(int num) {
    if (num == 2 || num == 3) {
        return true;
    }
    if (num == 1 || num % 2 == 0) {
        return false;
    }
    for (int i = 3; i * i <= num; i += 2) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

bool isPalindrome(int num) {
    int temp = num, reverseNum = 0;
    while (temp > 0) {
        reverseNum = reverseNum * 10 + temp % 10;
        temp /= 10;
    }
    return reverseNum == num;
}

int main() {
    int a, b, result[100], count = 0;
    while (true) {
        scanf("%d%d", &a, &b);
        if (a == 0 && b == 0) {
            break;
        }
        int palindromePrimeCount = 0;
        for (int i = a; i <= b; i++) {
            if (isPrime(i) && isPalindrome(i)) {
                palindromePrimeCount++;
            }
        }
        // 保存结果
        result[count++] = palindromePrimeCount;
    }
    // 输出结果
    for (int i = 0; i < count; i++) {
        printf("%d\n", result[i]);
    }
    return 0;
}


供参考:

#include<stdio.h>
int isPrime(int n) //判断素数
{
    int i;
    if (n < 4)  return n > 1;
    for (i = 2; i * i <= n; i++)
        if (n % i == 0) return(0);
    return(1);
}
int ispalindrome(int n)//判断回文数
{
    int t = n, k = 0;
    while (t) {
        k = k * 10 + t % 10;
        t /= 10;
    }
    return k == n;
}
int main()
{
    int  i, a, b, cnt;
    while (scanf("%d%d", &a, &b) == 2 && a != 0 && b != 0) {
        for (i = a, cnt = 0; i <= b; i++) {
            if (isPrime(i) && ispalindrome(i))
                cnt++;   
        }
        printf("%d\n", cnt);
    }
    return 0;
}