首页 > 试题广场 >

素数回文

[编程题]素数回文
  • 热度指数:15753 时间限制: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 <math.h>

int main(){
    char arr[100] = " ";
    int len = 0;
    scanf("%s", arr);
    while(arr[len] != '\000')
        len++;
    for(int i = len, j = len - 1; i < 2 * len - 1;)
        arr[i++] = arr[--j];
    len = 2 * len - 1;
    long num = 0, count = 0, n = 1;
    while(len--){
        num += n * (arr[len]-'0');
        n *= 10;
    }
    int i = 0, j = (int)sqrt(num);
    for(i = 2; i <= j; i++){
        if(num % i == 0)
            break;
    }
    printf("%s", i > j? "prime" : "noprime");
    return 0;
}

发表于 2022-06-16 15:51:12 回复(0)
#include<stdio.h>
#include<math.h>
#define N 20
int is_prime(long long num) {
    for (int i = 2; i <= sqrt(num); i++)
        if (0 == num % i)
            return 0;
    return 1;
}
int main() {
    int arr[N] = {0}, i = 0, input = 0;
    long long num = 0;
    //按位数将数输入至数组中
    scanf("%d", &input);
    for (int j = 1; j < 10; j++) {
        if (0 == input / (int)pow(10, j)) {
            i = j - 1;
            for (int k = j - 1; k >= 0; k--) {
                arr[k] = input % 10;
                input /= 10;
            }
            break;
        }
    }
    for (int j = i + 1, k = i - 1; k >= 0; j++, k--)
        arr[j] = arr[k];
    //将数组还原成一个数
    for (int j = 0; j <= 2 * i; j++) {
        num = num * 10 + arr[j];
    }
    if (is_prime(num) == 1)
        printf("prime\n");
    else
        printf("noprime\n");
    return 0;
}
循环到我自己都不想看了🤣🤣🤣
发表于 2022-08-11 16:34:44 回复(0)
#include<iostream>
#include<cmath>
using namespace std;

int main() {
    long n;
    cin >> n;
    // 构造回文数
    long tmp = n / 10;
    while (tmp) {
        n = n * 10 + tmp % 10;
        tmp /= 10;
    }
    // 判断是否为素数
    for (long i = 2; i <= (long)sqrt(n); ++i) {
        if (n % i == 0) {
            cout << "noprime";
            return 0;
        }
    }
    cout << "prime";
    return 0;
}

发表于 2022-04-01 16:12:05 回复(0)
#include<stdio.h>
int huiwen(int num) {
    int rev = 0;
    int num2 = 0;
    while (num > 0) {
        num2 = num % 10;
        num = num / 10;
        rev = rev * 10 + num2;
    }
    return rev;
}
int prime(int num) {
    if (num <= 1) return 0;
    for (int j = 2; j < num; j++) {
        if (num % j == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    int num;
    scanf("%d", &num);
    int rev = huiwen(num);
    if (prime(rev)) {
        printf("prime\n");
    } else {
        printf("noprime\n");
    }
    return 0;
}
发表于 2024-10-17 20:40:32 回复(0)
t = list(input())
a = t[:-1][::-1]
s = "".join(i for i in (t+a))
n = int(int(s)**0.5)
flag=1

for i in range(2,n+1):
    if int(s)%i == 0:
        flag=0
        break

print("prime" if flag==1 else "noprime") 

发表于 2024-02-13 20:41:18 回复(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<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 <iostream>
#include<cmath>
using namespace std;
 
long long getHuiWen(int n){
    long long m=n;
    n/=10;   //去掉n最后一位数字, 后面再添加回来为回文中间数
    while(n){
        m=m*10+n%10; //  将去掉n最后一位数字*10 再加上n的最后一位数
        n/=10;       // 每次循环都去掉n最后一位数
    }
    return m;
}
 
bool isPrime(long long n){
    if(n<2) return false;  // 处理小于等于1的情况
    if (n == 2) return true;  // 2是质数
    if (n % 2 == 0) return false; // 排除偶数
    for (long long i = 3; i * i <= n; i += 2) { // 只检查奇数
        if (n % i == 0) return false;
    }
    return true;
}

int main() {
    int n;
    cin>>n;
    //先求出回文数
    long long m=getHuiWen(n);
    if(isPrime(m))
        cout<<"prime"<<endl;
    else
        cout<<"noprime"<<endl;
    return 0;
 
}

发表于 2025-03-23 14:50:00 回复(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)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in  = new Scanner(System.in);
        int n = in.nextInt();
        long pali = palindrome(n);
        if (isprime(pali)){
            System.out.println("prime");
        } else {
            System.out.println("noprime");
        }
    }

    public static long palindrome(int n){
        String num = Integer.toString(n);
        StringBuilder palinum = new StringBuilder(num);
        for (int i = num.length()-2; i >= 0; i--) {
            palinum.append(num.charAt(i));
        }
        return Long.parseLong(palinum.toString());
    }

    public static boolean isprime(long pali){
        int count = 0;
        for (int i = 2; i < Math.sqrt(pali); i++) {
            if (pali % i == 0){
                count++;
            }
        }
        return count == 0;
    }
}

发表于 2024-10-14 15:02:54 回复(0)
#include <iostream>
#include<cmath>
using namespace std;

long long getHuiWen(int n){
    long long m=n;
    n/=10;
    while(n){
        m=m*10+n%10;
        n/=10;
    }
    return m;
}

bool isPrime(long long n){
    if(n<2)
        return false;
    for(long long i=2;i<=sqrt(n);i++){
        if(n%i==0)
            return false;
    }
    return true;
}
int main() {
    int n;
    cin>>n;
    //先求出回文数
    long long m=getHuiWen(n);
    if(isPrime(m))
        cout<<"prime"<<endl;
    else
        cout<<"noprime"<<endl;
    return 0;

}

发表于 2024-08-03 19:08:23 回复(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>

int main()
{
    int a;
    scanf("%d", &a);
    int count=0;
    int ret=a;
    while (ret) 
    {
        ret/=10;
        count++;
    }
    long long sum=a*pow(10, --count);
    ret=a/10;
    while (count) 
    {
        sum+=(ret%10)*pow(10, count-1);
        count--;
        ret/=10;
    }
    for (int i=2; i<=sqrt(sum); i++) 
    {
        if (sum%i==0) 
        {
            printf("noprime");
            return 0;
        }
    }
    printf("prime");
    return 0;
}

编辑于 2024-04-22 19:55:52 回复(0)
//抄的,好多地方看不懂,跟着过了一遍。
#include<stdio.h>
#include<math.h>

long long hw(long long t)
{
    int a=0;
    long long b=t;
    for(;b!=0;)
    {
        b/=10;
        a++;
    }
    long long d=t;
    for(;a>1;a--)
    {
        d=(d*10+t/10%10);
        t/=10;
    }
    return d;
}

int su(long long t)
{
    long long a;
    int b=0;
    if(t%2==0)
    {
        return 0;
    }
    long double c=sqrt(t);
    for(a=3;a<c;a+=2)
    {
        if((t%a)==0)
        {
            b++;
            break;
        }
    }
    if(b==0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    long long t;
    scanf("%lld",&t);
    t=hw(t);
    t=su(t);
    if(t==1)
    {
        printf("prime");
    }
    else if(t==0)
    {
        printf("noprime");
    }
    return 0;
}

编辑于 2024-04-09 19:27:32 回复(0)
//BC157 素数回文
#include "stdio.h"
#include "math.h"
int isPrimeNumber(long long a);
long long hw(long long t);

int main(){
    long long x;
    scanf("%lld",&x);
    if(isPrimeNumber(x) == 1){
        long long hws;
        hws = hw(x);
        if(isPrimeNumber(hws) == 1)
            printf("prime");
        else
            printf("noprime");
    }
    else
        printf("noprime");


    return 0;
}
int isPrimeNumber(long long a){
    for(long long i=2;i<sqrt(a);i++){
        if(a%i==0)
            return 0;
    }
    return 1;
}
long long hw(long long t){
    long long m=t;
    t/=10;
    while(t!=0){
        m=m*10+t%10;
        t/=10;
    }
    return m;
}

编辑于 2024-04-07 12:24:53 回复(0)
#include <stdio.h>
#include <math.h>

//判断是否为回文数
int issushu(long long  n)
{
    int i = 0;
    for (i = 2; i <= sqrt(n); i++) {
        if (n % i == 0)return 0;
    }
    return 1;
}

int main() {
	//初始化数据
    int  n = 0, len = 1;
    long long num, sum = 0;
    scanf("%lld", &num);
    long long  tmp = num;

	//将输入数据倒置,获取后半段数字
    while (tmp > 0) {
        n = n * 10 + tmp % 10;
        len *= 10;
        tmp /= 10;
    }
    len /= 10;//除掉倒置数据的开头一维
    sum = num * len + n % len;//前半段和后半段结合
    if (issushu(sum)) printf("prime");
    else printf("noprime");

    return 0;
}

发表于 2024-02-23 20:29:29 回复(0)

问题信息

难度:
53条回答 3650浏览

热门推荐

通过挑战的用户

查看代码
素数回文