题目描述
现在给出一个素数,这个素数满足两点:
1、 只由1-9组成,并且每个数只出现一次,如13,23,1289。
2、 位数从高到低为递减或递增,如2459,87631。
请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。
输入描述:
输入只有1行。
第1行输入一个整数t,保证t为素数。
数据保证:9<t<109
输出描述:
输出一行字符串,如果t的回文数仍是素数,则输出“prime”,否则输出"noprime"。
示例1
输入
13
输出
prime
说明
13的回文数是131,131是素数
示例2
输入
17
输出
noprime
说明
17的回文数是171,171不是素数(因子有3)
备注:
素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
素数的回文数为题意中的定义,1331不是素数的回文数。
#include<cstdio>
#include<cmath>
#include<cstring>
int main(){
int vount=0, j=0;
long sum=0;
char a[999];
scanf("%s",a);
int len = strlen(a); //要判断数字的位数即长度可以转换成求字符串长度
for(int i=len-2;i>=0;i--){
a[len+j] = a[i];
j++;
}
a[len+j] = '\0';
for(int i=0;i<len+j;i++){
sum =sum*10+(a[i]-'0'); //增加位数的表达
}
for(long k=2;k<=sqrt(sum);k++){ //素数的表达
if(sum%k==0) vount++;
}
if(vount==0)
printf("prime");
else
printf("noprime");
return 0;
}
素数的表达还有:
int a,b ,x[99999]={0},count,k=0 ;
scanf("%d %d",&a,&b);
for(int i=a;i<=b;i++){
count=0;
for(int j=2;j<=sqrt(i);j++){
if(i%j==0)
count++;
}
if(i==1){ //1既不是质数(素数)也不是合数,但1是奇数不是偶数
count++;
}
if(count==0){
x[k]=i;k++; //把素数装进数组里,k是素数的个数
}
}