66pts求调

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

steamdream @ 2024-06-03 16:00:57

#include<bits/stdc++.h>
using namespace std;
bool prime(int n)
{
    if(n==1) return false;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
            return false;
    }
    return true;
}
bool huiwen(int n)
{
    int m=0,x=n;
    while(x!=0)
    {
        m=m*10+x%10;
        x/=10;
    }
    return m==n;
}
int main()
{
    int a,b;
    cin>>a>>b;
    for(int i=a;i<=b;i++)
    {
        if(prime(i)&&huiwen(i))
        {
            cout<<i<<endl;
        }
    }
    return 0;
}

为啥66分???


by kervinyan @ 2024-06-03 16:06:17

@gcdgcd 不知道,但是参考如下


by kervinyan @ 2024-06-03 16:06:37

@gcdgcd ```

include<stdio.h>

include <stdbool.h>

bool ispa(int x) //判断回文数的函数 { int num[20]; int n = 0; while (x)//用数组储存每一位数 { num[++n] = x % 10; x /= 10; } for(int i=1,j=n;i<j;i++,j--) if(num[i]^num[j]) return false; return true; } bool ispr(int x) //判断质数的函数 { int i; for(i=2;i*i<=x;i++) if(x%i==0) return false; if(x<=1) return false; return true; } int main() //主函数 { int a, b; bool pa = false;//初始化pa pr为false bool pr = false; scanf("%d %d", &a, &b); if(a==2) printf("%d\n",a); if(!(a&1)) a++; if(b>9999999) b=9999999; for (int i = a;i <= b; i+=2)//偶数一定不是质数,缩小范围(a一定大于等于5 所以不需要考虑2) { pa = ispa(i);//判断回文数 if (pa)//是回文数就再判断是不是质数 pr = ispr(i); if (pr)//是质数就输出 printf("%d\n",i); pa = false;//重置pa和pr pr = false; } return 0; }


by kervinyan @ 2024-06-03 16:07:17

#include<stdio.h>
#include <stdbool.h>
bool ispa(int x) //判断回文数的函数
{
    int num[20];
    int n = 0;
    while (x)//用数组储存每一位数
    {
        num[++n] = x % 10;
        x /= 10;
    }
    for(int i=1,j=n;i<j;i++,j--)
        if(num[i]^num[j]) return false;
    return true;
}
bool ispr(int x) //判断质数的函数
{
    int i;
    for(i=2;i*i<=x;i++)
        if(x%i==0) return false;
    if(x<=1) return false;
    return true;
}
int main() //主函数
{
    int a, b;
    bool pa = false;//初始化pa pr为false
    bool pr = false;
    scanf("%d %d", &a, &b);
    if(a==2) printf("%d\n",a);
    if(!(a&1)) a++;
    if(b>9999999) b=9999999;
    for (int i = a;i <= b; i+=2)//偶数一定不是质数,缩小范围(a一定大于等于5 所以不需要考虑2)
    {
        pa = ispa(i);//判断回文数
        if (pa)//是回文数就再判断是不是质数
            pr = ispr(i);
        if (pr)//是质数就输出
            printf("%d\n",i);
        pa = false;//重置pa和pr
        pr = false;
    }
    return 0;
}

by kervinyan @ 2024-06-03 16:08:26

能互关不


by steamdream @ 2024-06-03 16:26:41

OK


by wangqicheng1637 @ 2024-06-10 16:27:55

@kervinyan 27、28、34、35、36、37何必呢? 用一个if就够

if ( pa(i) && pr(i) )

by wangqicheng1637 @ 2024-06-10 16:32:22

@kervinyan 判断回文:

bool huiwen( int x ) //判断回文数 
{
    if ( x < 0 ) 
    {
        return false;
    }
    if ( x == 0 ) 
    {
        return true;
    }
    string str = to_string(x);
    long long len = str.length();
    for ( int i = 0; i < len / 2; i ++ ) 
    {
        if ( str[i] != str[len - 1 - i] )
        {
            return false;
        }
    }
    return true;
}

更简单


|