为何不对(又一次)

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

mcz123321 @ 2024-05-29 22:20:46

#include<bits/stdc++.h>
using namespace std;

bool ss(long long a)
{
    if(a<2) return 0;
    for(int i=2;i<=sqrt(a);i++)
    {
        if(a%i==0) return 0;
    }
    return 1;
 } 
bool hws1(long long a)
{
    int b;
    while(a!=0)
    {
        b++;
        a/=10;
    }
    return b%2;
}
int qz(long long a)
{
    int b=1;
    while(a!=0)
    {
        a/=10;
        b*=10;
    }
    return b/10;
}
int main()
{
    long long a,b;
    cin>>a>>b;
    for(long long j=qz(a);j<b;j*=10)
    {
        if(j==0)j++;
        else if(hws1(j))//9位 
        {
            if(j==1)//1
            {
                for(int i=1;i<10;i+=2)
                    if(ss(i)&&i>=a&&i<=b) cout<<i<<endl;
            }
            if(j==100)//3
            {
                for(int i=1;i<=9;i++)
                    for(int x=0;x<=9;x++)
                        if(ss(i*100+x*10+i)&&i*100+x*10+i>=a&&i*100+x*10+i<=b) cout<<i*100+x*10+i<<endl;
            }
            if(j==10000)//5
            {
                for(int i=1;i<=9;i+=2)
                    for(int x=0;x<=9;x++)
                        for(int y=0;y<=9;y++)
                            if(ss(i*10000+x*1000+y*100+x*10+i)&&i*10000+x*1000+y*100+x*10+i>=a&&i*10000+x*1000+y*100+x*10+i<=b) cout<<i*10000+x*1000+y*100+x*10+i<<endl;
            }
            if(j==1000000)//7
            {
                for(int i=1;i<=9;i+=2)
                    for(int x=0;x<=9;x++)
                        for(int y=0;y<=9;y++)
                            for(int z=0;z<=9;z++)
                                if(ss(i*1000000+x*100000+y*10000+z*1000+y*100+x*10+i)&&i*1000000+x*100000+y*10000+z*1000+y*100+x*10+i<=b&&i*1000000+x*100000+y*10000+z*1000+y*100+x*10+i>=a) cout<<i*1000000+x*100000+y*10000+z*1000+y*100+x*10+i<<endl;
            }
        }
    }
    return 0;
}

by zml1029 @ 2024-07-29 11:06:21

给你看看我的代码


#include<bits/stdc++.h>
using namespace std;
int isPrime(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
           return 0;    
        }
    }
    return n;
}
int hw(int n){
    int sum=0,k=n;
    while(n!=0){
        sum=sum*10+n%10;
        n=n/10;
    }
    if(sum==k){
        return 1;
    }
    else return 0;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=n;i<=m;i++){
        if(i>=9989900){
            return 0;
        }
        if(hw(i)){
            if(isPrime(i)){
                cout<<i<<endl;
            }
        }
    }
    return 0;
}
这道题的9989900是最大的回文质数范围,以防TLE。

|