最后一个超时该怎么改,求助大佬

P1217 [USACO1.5] 回文质数 Prime Palindromes

want_AC_ing @ 2023-04-14 17:04:37

#include <stdio.h>
#include <math.h>

int main()
{
  int a,b;
  scanf("%d%d",&a,&b);
  int n,i,j,k,m,ma,mb=0;
  int an[10000],bn[10000],cn[10000];
    if(a%2==0)a+=1;
    for(n=a;n<=b;n+=2)//a到b的范围
    {
        j=n;//保护n的值
        for(i=0;j;i++)//倒序存放在数组bn[]i位
        {
            bn[i]=j%10;
            j/=10;
           // printf("%d",bn[i]);
        }
         m=i-1;
        for(k=0;k<=i-1;k++)//倒叙变顺序
        {

            an[k]=bn[m];
            m--;
           // printf("%d\n",an[k]);
        }
        for(k=0;k<=i;k++)//判断是否位回文数
        {
            ma=1;
            if(an[k]!=bn[k])
            {
              ma=0;break;
            }
        }
        if(ma){cn[mb]=n;mb++;}//储存回文数
        //printf("cn=%d\n",cn[mb]);
    }
    /*for(i=0;i<=mb;i++)
    {
        //printf("%d\n",cn[i]);
    }*/
    int cd,vf;
   for(i=0;i<=mb-1;i++)//判断质数
   {
       vf=1;
       for(cd=2;cd*cd<=cn[i];cd++)
       {
           if(cn[i]%cd==0)
           {
               vf=0;break;
           }
       }
       if(vf)printf("%d\n",cn[i]);
   }
    return 0;
}

by JJDDJJ @ 2023-04-15 20:27:48

只列举单数位数```cpp

include<bits/stdc++.h>

using namespace std; bool ss(int n) { if(n==1) return 0;
for(int x=2;x<=sqrt(n);++x) if(n%x==0) return 0; return 1; } bool hw(int n)//回文数函数 { int s=0,m=n; while(n) { s=s*10+n%10; n/=10; } if(s==m) return 1;else return 0; } bool ws(int n) { if(n>=1000&&n<=9999||n>=100000&&n<=999999) return 0; return 1; } int main() { int a,b; cin>>a>>b; if(b>9999999) b=9999999;//不用去管八位数 if(a==2) cout<<2<<endl; if(a%2==0) a++; for(int i=a;i<=b;i+=2) { if(!ws(i)) continue; if(!hw(i)) continue; if(!ss(i)) continue; printf("%d\n",i); } return 0; }


by JJDDJJ @ 2023-04-15 20:29:30


by want_AC_ing @ 2023-04-15 22:35:08

@JJDDJJ 没懂什么意思,双数位数不是也有回文质数吗


|