题目描述
小蓝是一个热爱研究数字的学生。有一天他发现有的数字既是质数,又是个回文数。但是当数字很大时,他就觉得计算起来很困难。于是他找到了擅长编程的你,他会向你请教数次,每次询问一个数字,请你回答他那个数字是否是回文质数。
输入
第一行,输入一个正整数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;
}
在这个程序中,我们首先定义了两个函数isPrime
和isPalindrome
,分别用于判断一个数是否为质数和回文数。其中,isPrime
函数使用了常见的质数判断算法,即从2到sqrt(n)枚举所有可能的因子,如果存在一个因子能够整除n,则n不是质数。isPalindrome
函数则使用了反转数字的方法,将原始数字反转后与原始数字进行比较,如果相等则说明是回文数。
接下来,我们使用scanf
函数输入询问次数,并使用一个循环来处理每个询问。在每次循环中,我们使用scanf
函数输入待判断的数字,并分别调用isPrime
和isPalindrome
函数判断该数字是否为质数和回文数。如果两个函数都返回true,则说明该数字既是质数又是回文数,输出”Yes”;否则输出”No”。
需要注意的是,在实际应用中,需要进行输入验证以确保程序的正确性,例如判断输入的数字是否合法、询问次数是否符合要求等。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END