66,来个大佬帮帮我

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

Zzy20060323 @ 2024-09-29 17:30:27

#include<stdio.h>
#include<math.h>
int prime(int x)
{
    if (x == 1)
    {
        return 0;
    }
    if (x == 2 || x == 3)
        return 1;
    for (int i = 2; i <= sqrt(x); i++)
    {
        if (x % i == 0)
            return 0;
    }
    return 1;
}
int hw_prime(int x)
{
    if ((x >= 1000 && x <= 9999) || (x >= 100000 && x <= 999999))
        return 0;
    int i=1,m=0;
    int a[20];
    do
    {
        a[i] = x % 10;
        x /= 10;
        i++;
    } while (x!=0);
    for (int j = 1; j <= (i - 1)/2; j++)
    {
        if (a[j] != a[i - j])
            return 0;
    }
    return 1;
}
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    if(a%2==0)
    {
        a++;
        for (int i = a; i <= b; i += 2)
        {

            if (prime(i) && hw_prime(i))
            {
                printf("%d\n", i);
            }
        }
    }
    else
    {
        for (int i = a; i <= b; i += 2)
        {

            if (prime(i) && hw_prime(i))
            {
                printf("%d\n", i);
            }
        }
    }
    return 0;
}

by Never_care @ 2024-09-29 17:43:11

@Zzy20060323 暴力即可,没那么难

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int c[100000005];
bool su(int n)
{
    int i;
    for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    int i,j,k,l,a,b;
    long long num=0;
    cin>>a>>b;
    for(i=5;i<=9;i++)
    {
        num++;
        c[num]=i;
    }
    for(i=1;i<=9;i++) 
    {
        num++;
        c[num]=i*10+i;
    }
    for(i=1;i<=9;i++)
    {
        for(j=0;j<=9;j++)
        {
            num++;
            c[num]=i*100+j*10+i;    
        }
    }
    for(i=1;i<=9;i++) 
    {
        for(j=0;j<=9;j++)
        {
            num++;
            c[num]=i*1000+j*100+j*10+i;
        }
    }
    for(i=1;i<=9;i++)
    {
        for(j=0;j<=9;j++)
        {
            for(k=0;k<=9;k++)
            {
                num++;
                c[num]=i*10000+j*1000+k*100+j*10+i;             
            }
        }
    }
    for(i=1;i<=9;i++) 
    {
        for(j=0;j<=9;j++)
        {
            for(k=0;k<=9;k++)
            {
                num++;
                c[num]=i*100000+j*10000+k*1000+k*100+j*10+i;
            }
        }
    }
    for(i=1;i<=9;i++)
    {
        for(j=0;j<=9;j++)
        {
            for(k=0;k<=9;k++)
            {
                for(l=0;l<=9;l++)
                {
                    num++;
                    c[num]=i*1000000+j*100000+k*10000+l*1000+k*100+j*10+i;
                }
            }
        }
    }
    for(i=1;i<=9;i++)
    {
        for(j=0;j<=9;j++)
        {
            for(k=0;k<=9;k++)
            {
                for(l=0;l<=9;l++)
                {
                    num++;
                    c[num]=i*10000000+j*1000000+k*100000+l*10000+l*1000+k*100+j*10+i;
                }
            }
        }
    }
    sort(c+1,c+num+1);
    for(i=1;i<=num;i++)
    {
        if(c[i]>=a && c[i]<=b)
        {
            if(su(c[i])==1)
            {
                cout<<c[i]<<endl;   
            }
        }
    }
    return 0;
}

by Zzy20060323 @ 2024-09-30 01:10:30

能帮我调一下我的代码吗,求求


by wh2680906260 @ 2024-10-04 15:24:55

@Zzy20060323 你这种写法就是不够快(我一开始也是这样写的(T.T)),还要去计算判断是不是回文数,直接暴力找出来做判断会更快


|