题解 | #素数回文#
素数回文
https://www.nowcoder.com/practice/d638855898fb4d22bc0ae9314fed956f
#include <stdio.h> #include <stdbool.h> #include <math.h> bool isprime(long long prime)//判断是否为素数,若不是素数一定可以化成一个比这个数的开根小于等于的数乘以比这个开根的数大于等于的数,例如:9 = 3*3 3<=根号9 3>=根号9 8 = 2*4 2<=根号8 4 >= 根号8 { for(int i = 2; i <= sqrt(prime); i++) { if(prime % i == 0) return false; } return true; } int main() { int prime; scanf("%lld", &prime); int count = 0;//计入prime的长度 int p = prime; while(p) { p /= 10; count++; } long long sum = (prime%10)* pow(10,count-1);//记录prime的第一位 p = prime;//更新p的值 p /= 10;//已经记录了第一位,获取剩下的 int t = 0;//代表回文数的每个数字的对称位置的幂 while(p) { int store = p % 10;//取到每个数的第一位 p /= 10;//获取剩下的数 sum += store*(pow(10,count+t)+pow(10,count-2-t));//相加每个数字的对称位 //例如:127 -> 12721 已经记录了7,再获取2,对2所在的位置进行相加以及他的对称位进行相加 t++; } if(isprime(sum)) { printf("prime"); } else { printf("noprime"); } return 0; }