素数回文(只有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; }