C - C
Time limit : 15 s | Memory limit : 32 mb |
---|---|
Submitted : 129 | Accepted : 64 |
64bit Integer Format : %lld |
---|
Problem Description
The number 151 is a prime palindrome because it is both a prime number and a palindrome (it is the same number when read forward as backward). Write a program that finds all prime palindromes in the range of two supplied numbers a and b (5 <= a < b <= 1000,000,000); both a and b are considered to be within the range .
Input
Line 1: Two integers, a and b
Output
The list of palindromic primes in numerical order, one per line.
Sample Input
5 500
Sample Output
5 7 11 101 131 151 181 191 313 353 373 383
就是在一定数的范围内判断打印出回文素数。
但是此题思路是先构造回文数,再判断是否为素数。Is_prime是判断,get_pain是构造。
#include <stdio.h> #include <stdlib.h> int is_prime(int n) { int i; if (n == 2) return 1; if (n % 2 == 0) return 0; for(i = 3; i * i <= n; i+=2) // i += 2跳跃遍历,节省时间(因为n此时已经不是偶数,看n能否被3,5,7,整除) { if(n % i == 0) return 0; } return 1; } int get_pain(int cur) { int tmp = cur; cur /= 10; do{ tmp = tmp * 10 + cur % 10;//现有数*10,再从后往前添加位数 cur /= 10; }while(cur); return tmp; } int arr[60000]; int n; int main() { int a,b,i; n = 0; arr[n++] = 2,arr[n++] = 3,arr[n++] = 5, arr[n++] = 7,arr[n++] = 11; for(i = 10;i <= 100000; i++) { int tmp = get_pain(i); if(is_prime(tmp)) { arr[n++] = tmp; } } while(scanf("%d%d",&a,&b)!=EOF) { for(i = 0;i <= n;i++) { if(arr[i] >= a && arr[i] <= b) printf("%d\n",arr[i]); } } return 0; }