【洛谷】P1217 [USACO1.5] 回文质数 Prime Palindromes

发布时间 2023-12-02 11:49:30作者: Azzero
#include <stdio.h>
#include <math.h>
int main(){
    int a,b;
    int num[12000]={0}; //保存回文数的数组 
    int al[8]={0};        //保存取余后的原位置上的数字 
    int i,j,k=0,ii,temp,length=0,sum,count=0; //ii是算术平方根,length是原数字的位数长度,sum是反过来的和 
    scanf("%d %d",&a,&b);
    for(i=5; i<=b; i+=2){
        length=0;
        temp=i;
        sum=0;
    //    printf("现在的i=%d\n",i);
        while(temp != 0){            //分解数字 
            al[length]=temp%10;
            temp/=10;
            length++;
        }
        for(j=0; j<length; j++){    //根据分解的数字,算倒序的和 
            sum=sum*10+al[j];
        }
        if(i == sum){            //如果倒序和正序相等,视为回文数,存入num数组中。 
            num[k]=i;
            //printf("**回文数i=%d\n",i);
            k++;
        }
    }
    //printf("壹亿下有%d个回文数\n",k); //11003个,所以开12000个数组空间  
    for(i=0; i<k; i++){
        ii=sqrt(num[i]);
        for(j=2; j<=ii; j++){
            if(num[i]%j == 0){
                break;
            }
        }
        if(j > ii){
            if(num[i]>=a && num[i]<=b){
                printf("%d\n",num[i]);
                count++;
            }
        }
    }
    //printf("壹亿下有%d个回文质数\n",count); //779个回文质数,算上2,3是781个 
    return 0;
}

用C写的,数组也不小了。先判断回文数,再判断素数比较快。

刚开始提交的时候,数组开小了,加了几次RE,听说还有动态数组,后面再说。