题目描述

现在给出一个素数,这个素数满足两点:

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是素数的个数
    }
}