HOJ 1004 回文素数

来源:互联网 发布:服务器坏了 raid 数据 编辑:程序博客网 时间:2024/06/08 18:35

C - C

Time limit : 15 sMemory limit : 32 mbSubmitted : 129Accepted : 6464bit Integer Format : %lld

Submit

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

5711101131151181191313353373383
就是在一定数的范围内判断打印出回文素数。
但是此题思路是先构造回文数,再判断是否为素数。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;}

原创粉丝点击