素数回文(只有80能不能来个大佬帮我看一下哪里还有问题啊qwq)

链接:https://ac.nowcoder.com/acm/problem/14703链接:https://ac.nowcoder.com/acm/problem/14703

来源:牛客网

题号:NC14703

时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒

空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M

64bit IO Format: %lld

题目描述

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

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>
long long f(long long x);

int main()
{
    long long n, a[10000];
    int sum = 0;
    scanf("%lld", &n);
    int count = 0;
    while (n > 0)           //逆序得到每个数
    {
        a[count] = n % 10;
        n /= 10;
        count++;
    }
    count -= 1;//知道这是一个几位数,最后一个数编号为count(从0开始计数的)
    for (int i = count; i >= 0; i--)//逆序加一遍
    {
        sum = sum * 10 + a[i];
    }
    for (int i = 1; i <= count; i++)//顺序加一遍,得到回文数
    {
        sum = sum * 10 + a[i];
    }
    if (f(sum))
        printf("prime");
    else
        printf("noprime");

    return 0;
}

long long f(long long x)
{
    for (int i = 2; i * i <= x; i++)
    {
        if (x % i == 0)
        {
            return 0;
        }
    }
    return 1;
}

全部评论

相关推荐

07-03 16:02
门头沟学院 Java
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务