题目描述
给定一个正整数n,如果n的各个位数之和是一个素数,同时n本身又是一个回文数,那么n就是我们所说的特殊的回文“素数”。
输入格式
输入一个正整数n(n的位数最高不超过1000位)
输出格式
如果n是特殊的回文“素数”,请输出yes,否则输出no。
样例输入
111
样例输出
yes
样例输入
11111111
样例输出
no
样例解释
样例一:
111各个数位上的数字和为3,3是一个素数,并且111是回文数,所以111是特殊的回文素数
样例二:
11111111各个数位上的数字和为8,不满足特殊的回文数的定义
#include <string.h>
#include <stdio.h>
int isprime(int n)
{
if(n<2)
return 0;
for(int i=2;i<n;i++)
if(n%i==0)
return 0;
return 1;
}
int hw(char *a)
{
int len = strlen(a);
int i=0,j=len-1;
while(i<j)
{
if(a[i] != a[j])
break;
i++;
j--;
}
if(i>=j)
return 1;
return 0;
}
int main()
{
char s[1001];
int sum = 0;
gets(s);
int i=0;
while(s[i] != 0)
{
sum += s[i] - '0';
i++;
}
if(isprime(sum) && hw(s))
printf("yes");
else
printf("no");
return 0;
}
#include<stdio.h>
int main()
{
char a[1000];
int n=0,i,j,sum=0;
while(scanf("%c",&a[n++])!=EOF);
for(i=0,j=n-1;i<=j;i++,j--)
{
if(a[i]!=a[j])
{
printf("no");
return 0;
}
if(i==j)
{
sum+=a[i]-'0';
}
else
{
sum+=a[i]+a[j]-'0'-'0';
}
}
for(i=2;i*i<=sum;i++)
{
if(sum%i==0)
{
printf("no");
return 0;
}
}
printf("yes");
return 0;
}