首页 > 试题广场 >

素数回文

[编程题]素数回文
  • 热度指数:15793 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

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

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 <stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int main() {
    char a, b[1000]={};
    scanf("%s\n",b);
    int c=strlen(b);
   
    int y=2*c-2;
    for(int x=0;x<c-1;x++){
       
        b[y]=b[x];
        y--;
    }
 
    long long int o=strlen(b),r=0,m=1;
   
    for(int l=o-1;l>=0;l--){
        r+=(b[l]-'0')*m;
       
        m*=10;
    }
 
     int g=0,t=r;
    for(long long int i=2;i<sqrt(r);i++){
        long long int z=i;
        if(r%i==0){
            g++;
            printf("noprime");
            break;
        }
    }
    if(g==0){
        printf("prime");
    }
 
    return 0;
}
发表于 2025-08-18 01:40:22 回复(0)
#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool isprime(long long x)
{
    if(x <= 1)
    return false;
    for(int i = 2; i <= sqrt(x); i++)
    {
        if(x % i == 0)
        return false;
    }
    return true;
}

int main() {
    long long a, b, k;
    scanf("%lld", &a);
    b = a / 10;
    k = a;
    while(b)
    {
        k = k * 10 + b % 10;
        b /= 10;
    }
    if(isprime(k))
    printf("prime\n");
    else
    printf("noprime\n");
    return 0;
}
发表于 2025-05-11 23:40:54 回复(0)
#include <stdio.h>
#include <math.h>

int func(long int n){
    if(n==1){
        return 0;
    }
    else {
        for(int i=2;i<sqrt(n);i++){
            if(n%i==0){
                return 0;
            }
        }
        return 1;
    }
}

int main() {
    int n;
    scanf("%d",&n);
    int a[100],i=0;
    while(n){
        a[i]=n%10;
        n/=10;
        i++;
    }
    for(int j=0,k=i-1;j<i/2;j++,k--){
        int temp=a[j];
        a[j]=a[k];
        a[k]=temp;
    }
    for(int j=i-2;j>=0;j--){
        a[i]=a[j];
        i++;
    }
    long long b=0;
    for(int j=i-1,k=0;j>=0;j--,k++){
        b+=a[j]*pow(10,k);
    }
    if(func(b)==0){
        printf("noprime");
    }
    else{
        printf("prime");
    }
    return 0;
}
发表于 2025-03-16 11:02:49 回复(0)
#include <stdio.h>
#include <math.h>
void jug_prime(long long int x) {
    long long int y = 0, z = x;
    int cnt = 0, i = 0;
    while (x) {
        y = x % 10 + y * 10;
        x /= 10;
        cnt++;
    }
    x = y + z / 10 * pow(10,cnt);
    for (i = 2; i <= (int)sqrt(x); i++) {
        if (x % i == 0) {
            printf("noprime\n");
            break;
        }
    }
    if (i == (int)sqrt(x) + 1) {
        printf("prime\n");
    }
}
int main () {
    long long int x = 0;
    scanf("%lld", &x);
    jug_prime(x);
    return 0;
}
发表于 2025-01-16 22:39:45 回复(0)
#include<stdio.h>
#include<math.h>

int Is_prime(long k)
{ 
   long i = 0;
   for(i=2;i<=sqrt(k);i++)
   {
      if(k % i==0)
      {
        return 0;
      }
   }
    return 1;
}
long exchange(int k,int count)
{
    int x = 0;
    long sum = k *pow(10,count-1);
    k = k / 10;
    while(k)
    {
       x= k % 10;
       k = k /10;
       sum = sum + x *pow(10,count-2);
       count--;
    }
    return sum;
}
int judge(int k )
{
    int count = 0;
    while(k)
    {
        k = k / 10;
        count ++;
    }
    return count;
}
int main()
{
    int k = 0;
    scanf("%d\n",&k);
    int count = judge(k);
    long ret_number = exchange(k,count);
    int ret = Is_prime(ret_number);
    if(ret==1)
    {
        printf("prime\n");
    }
    else 
    {
        printf("noprime\n");
    }

    return 0 ;
}

发表于 2024-12-24 14:51:23 回复(0)
代码运行提示“您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。”请问该怎么办?

#include <stdio.h>
#include<math.h>
int main() {

    //获取素数
    int a=0;
    scanf("%d",&a);

    //将素数的每一位数分别存入数组并获得位数长度n
    int sum[100],n=0;
    for (int x=0; a!=0; x++) {
        sum[x]=a%10;
        a/=10;
        n++;
    }

    //第一遍存入的元素顺序相反 需要重新调成位置为正序
    int wei=n-1,zhong=0;
    for (int x=0; x<n/2; x++) {
        zhong=sum[x];
        sum[x]=sum[wei];
        sum[wei]=zhong;
        wei--;
    }

    //将素数转换成回文数
    for (int x=n-2; x>=0; x--) {
        sum[n]=sum[x];
        n++;
    }

    //将数组中的回文数赋值到整形变量he中
    int y=n-1,fang=0;long long he=0;
    for (int x=0; x<n; x++) {
        he+=sum[y]*(pow(10, x));
        y--;fang++;
    }

    //判断该回文数是否为素数
    int c=0;
    for (int x=2; x<he; x++) {
        if (he%x==0) {
            c=1;
            break;
        }
    }

    if (c==0) {
        printf("prime");
    }
    else {
        printf("noprime");
    }
    

    return 0;
}

发表于 2024-10-31 18:58:43 回复(0)
#include<stdio.h>
#include<math.h>
long long fact(int a){
    int j=a,d=a;
    int i=0,b,c=0;
    long long k=0;
    while(a>0){
        a=a/10;
        i++;
    }
    c=i;
    while(i>=0){
        b=j%10;
        j=j/10;
        k=k+b*pow(10,i-1);
        i--;
    }
    return (k+(d/10)*pow(10,c));
}
int main(){
    int h,count=0,num=1,k;
    long long l;
    scanf("%d",&h);
    l=fact(h);
    k=(int)sqrt(l);
    for(int i=2;i<=k;i++){
        if(l%i==0){
            num=0;
            break;
        }
        else{
            num=1;
        }
    }
    if(num)
        printf("prime");
    else printf("noprime");
    return 0;
}

发表于 2024-06-02 19:53:28 回复(0)
#include <stdio.h>
#include <math.h>

//我这个运行时间27ms,内存416kb是不是太大了
int IsPriNum(int num)
{
    int flag = 1;//假设是素数
    int tmp = num;
    int dig = 0;
    
    while (tmp)//求位数
    {
        tmp /= 10;
        dig++;
    }
    
    long long sum = num * pow(10, --dig);//4位数*1000,3位数*100...
    tmp = num / 10;//去掉不用变的个位数(变回文数后在中间)
    while (dig)//求回文数
    {
        sum += (tmp % 10) * pow(10, --dig);
        tmp /= 10;
    }

    //判断回文数是否为素数
    for (int i = 2; i <= sqrt(sum); i++)
    {
        if (sum % i == 0)
            return 0;//不用flag=0了直接返回0就行
    }
    return flag;
}
int main()
{
    int pri_num;
    scanf("%d", &pri_num);
    if (IsPriNum(pri_num))
        printf("prime\n");
    else
        printf("noprime\n");
    return 0;
}

编辑于 2024-01-13 22:53:49 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>

long long function(int n)
{
    long long a = 1;
    while (n)
    {
        a *= 10;
        n--;
    }
    return a;
}

int main()
{
    long long t = 0;
    long long count = 0;
    long long a = 0;
    long long c = 0;
    int flage = 1;
    int arr[20] = { 0 };
    scanf("%lld", &t);
    a = t;
    while (a)
    {
        a /= 10;
        count++;
    }
    long long b = 2 * count - 1;
    for (long long i = count; i >=0; i--)
    {
        arr[i] = t % 10;
        t /= 10;
    }
    for (long long i = 1; i <count; i++)
    {
        arr[b] = arr[i];
        b--;
    }
    long long n = 2 * count - 1;
    for (long long i = 1; i <= 2 * count - 1; i++)
    {
        c += function(n-1) * arr[i];
        n--;
    }
    for (long long i = 2; i < sqrt(c);i++)
    {
        if (c % i == 0)
        {
            flage = 0;
            break;
        }
    }
    if (flage)
    {
        printf("prime");
    }
    else
    {
        printf("noprime");
    }
    return 0;
}
编辑于 2023-12-25 10:46:16 回复(1)
#include <stdio.h>
#include<math.h>
long long makeprl(long long t)
{
    long long k = 0;
    k=t;
    k/=10;
    while(k)
    {
        t = t*10+k%10;
        k/=10;
    }

    return t;
}
void judge(long long k)
{
    long long i;
    int flag = 1;
    for(i=2;i<sqrt(k);i++)
    {
        if(k%i==0)
        {
            flag = 0;
            break;
        }
    }
    if(flag==1)
    {
        printf("prime");
    }
    else {
    printf("noprime");
    }
}
int main()
{
    long long t;//真服了,刚开始用的int类型,我想了半天,凎;
    scanf("%lld",&t);
    long long ret = makeprl(t);
    judge(ret);
    return 0;
}

发表于 2023-11-25 10:28:27 回复(0)
#include<stdio.h>
#include<math.h>
int isprime(long long int x)
{
    if(x==1)
        return 0;
    if(x==2)
        return 1;
    for (int i = 2; i <= sqrt(x); i++)
        if (0 == x % i)
            return 0;
    return 1;//1素数
}
int main()
{
    int n;
    scanf("%d", &n);
    int arr[100], i = 0, count = 0;
    while (n)
    {
        arr[i++] = n % 10;
        n /= 10;
        count++;
    }//把n按数位倒序存入数组中
    int k = 0;
    long long int num = 0;
    for (int i = count-1;i >= 0;i--)
    {
        num += arr[i] * (pow(10, k++));
    }
    for (int i = 1;i <= count-1;i++)
    {
        num += arr[i] * (pow(10, k++));
    }//形成回文数
    if (isprime(num) == 0)
        printf("noprime\n");
    else
        printf("prime\n");
    return 0;
}

发表于 2023-09-01 14:03:48 回复(0)
#include <stdio.h>
typedef long long LL;

LL hw(LL num)
{
    LL t = num/10;
    while(t)
    {
        num = num*10 + t%10;
        t/=10;
    }
    return num;
}

char* is_prime(LL num)
{
    if(num<2) return "noprime";
    for(int i = 2;i<=num/i;i++)
    {
        if(num%i==0) return "noprime";
    }
    return "prime";
}


int main()
{
    LL num = 0;
    scanf("%lld",&num);
    LL re = hw(num);

    printf("%s",is_prime(re));
    return 0;
}

发表于 2023-05-19 19:17:40 回复(0)
#include <stdio.h>
#include<math.h>
long long huiwen(long long x)
{
    long long n=x;
    long long i;
    while((x/10)!=0)
    {

        i=(x/10)%10;
        x=x/10;
        n=n*10+i;
    }
    return n;
}

int is_prime(long long y)
{
    long long i,n,k;
    k=sqrt(y);
    for(i=2;i<=k;i++)
    {
        if(y%i==0)
        {
            return 0;
        }

    }
    return 1;
}
int main()
{
    long long n,m,val=0;
    scanf("%lld",&n);
    m=huiwen(n);
    val=is_prime(m);
    if(val==1)
    {
        printf("prime");
    }
    else if(val==0)
    {
        printf("noprime");
    }
    return 0;
}

发表于 2023-03-25 16:14:59 回复(0)
#include <math.h>
#include <stdio.h>
long palindrome_number(long n);
long isPrime(long n);

int main() {
    long n, palindrome;
    scanf("%ld", &n);
    palindrome = palindrome_number(n);
    if(isPrime(palindrome)){
        printf("prime\n");
    } else {
        printf("noprime\n");
    }
    return 0;
}

long palindrome_number(long n){
    long palindrome = n, digit, copy = n;
    copy /= 10;
    while (copy) {
        digit = (copy) % 10;
        palindrome = 10 * palindrome + digit;
        copy /= 10;
    }
    return palindrome;
}

long isPrime(long n){
    long mark = 1;
    for(long i = 2; i <= sqrt(1.0 * n); i++){
        if(n % i == 0){
            mark = 0;
            break;
        }
    }
    return mark;
}

发表于 2023-02-10 18:06:24 回复(0)
#include <stdio.h>
#include<math.h>
int prime(long long t) {
    for (int i = 2; i <= sqrt(t); i++) {
        if (t % i == 0) {
            return 0;//t不是素数
        }
    }
    return 1;//t是素数
}
long long shu(long long t) {
    if (1 == prime(t)) {
        int a[9] = { 0 }, c = 0, i, t1 = t;
        for (i = 0; t1 != 0; i++) {
            a[i] = t1 % 10;
            t1 /= 10;
            c++;
            if (a[i] == 0) {
                return 0;//t中含‘0’不合要求
            }
            if (i > 0) {
                if (a[i] == a[i - 1]) {
                    return 0;//t中含相同数字不合要求
                }
                if (i > 1) {
                    if (a[i] > a[i - 1]) {
                        if (a[i - 1] <= a[i - 2]) {
                            return 0;//t中数字先减后增不合要求
                        }
                    }
                    if (a[i] < a[i - 1]) {
                        if (a[i - 1] >= a[i - 2]) {
                            return 0;//t中数字先增后减不合要求
                        }
                    }
                }
            }
        }
        t *= pow(10, (c - 1));
        for (i = 1; i < c; i++) {
            t += a[i] * pow(10, c - 1 - i);
        }
        return t;//t的回文数
    } else return 0;//t不是素数不合要求
}
int main() {
    long long t, a;
    scanf("%lld", &t);
    if (t > 9 && t < pow(10, 9)) {
        a = shu(t);
        if (a != 0) {
            a = prime(a);
            if (0 == a) {
                printf("noprime");
            } else printf("prime");
        } else printf("err");
    } else {
        printf("err");
    }
    return 0;
}
//可以说很完整了,初学者不知道有没有简化一些的方法
发表于 2023-01-12 14:28:47 回复(0)

问题信息

难度:
35条回答 3658浏览

热门推荐

通过挑战的用户

查看代码
素数回文