输入数次数字,每次输入一个数字,输出那个数字是否是回文质数

题目描述

小蓝是一个热爱研究数字的学生。有一天他发现有的数字既是质数,又是个回文数。但是当数字很大时,他就觉得计算起来很困难。于是他找到了擅长编程的你,他会向你请教数次,每次询问一个数字,请你回答他那个数字是否是回文质数。

输入

第一行,输入一个正整数k,表示询问次数。接下来k行,每行输入一个正整数a,表示第i次询问的数字。

输出

输出k行,第行输出第i次询问的结果,若数字为回文质数,输出TYes”;否则输出”No”。(去掉引号,区分大小写,请不要输出错误的大小写)

源代码

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

// 判断一个数是否为质数
bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

// 判断一个数是否为回文数
bool isPalindrome(int n) {
    int temp = n, reversed = 0;
    while (temp > 0) {
        reversed = reversed * 10 + temp % 10;
        temp /= 10;
    }
    return n == reversed;
}

int main() {
    int k;
    scanf("%d", &k);  // 输入询问次数

    for (int i = 0; i < k; i++) {
        int n;
        scanf("%d", &n);  // 输入待判断的数字

        if (isPrime(n) && isPalindrome(n)) {
            printf("Yes\n");  // 是回文质数
        } else {
            printf("No\n");  // 不是回文质数
        }
    }

    return 0;
}

在这个程序中,我们首先定义了两个函数isPrimeisPalindrome,分别用于判断一个数是否为质数和回文数。其中,isPrime函数使用了常见的质数判断算法,即从2到sqrt(n)枚举所有可能的因子,如果存在一个因子能够整除n,则n不是质数。isPalindrome函数则使用了反转数字的方法,将原始数字反转后与原始数字进行比较,如果相等则说明是回文数。

接下来,我们使用scanf函数输入询问次数,并使用一个循环来处理每个询问。在每次循环中,我们使用scanf函数输入待判断的数字,并分别调用isPrimeisPalindrome函数判断该数字是否为质数和回文数。如果两个函数都返回true,则说明该数字既是质数又是回文数,输出”Yes”;否则输出”No”。

需要注意的是,在实际应用中,需要进行输入验证以确保程序的正确性,例如判断输入的数字是否合法、询问次数是否符合要求等。

© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏 分享