• C++判断五位以内的对称素数


    题目内容:判断一个数是否为对称且不大于五位数的素数。

    输入描述:输入数据含有不多于50个的正整数n(0<n<232)

    输出描述:对于每个n,如果该数是不大于五位数的对称素数,则输出“Yes”,否则输出“No”。每个判断结果单独列一行。

    题目分析:

    (1)判断它是否是五位以内的数,即该数是否小于100000.

    (2)判断该数是否对称,以下三种情况成立:该数是一位数或11;该数是三位数,即该数大于100且小于1000,且该数的百位数等于个位数;该数是五位数,即该数大于10000且前两位等于后两位的逆序,即该数除以1000的商等于个位数与十位数颠倒位置。因四位数的对称数不可能是素数,所以不予考虑。

    (3)判断该数是否是素数。首先判断该数是否是1,若是1则不是素数。然后判断该数是否是非2的偶数,若是则非素数。最后从3开始,每次加2,直到其平方大于该数,判断该数对其取余是否为0.若出现取余为0的情况,则该数非素数。

    参考代码:

    #include <fstream>
    #include <iostream>
    
    using namespace std;
    bool isPrime(int n)
    {
         if(n==1) return false;
         if(n!=2&&n%2==0) return false;
         for(int i=3;i*i<=n;i=i+2)
         {
             if(n%i==0) return false;
         }
         return true;
    }
    bool isSym(int n)
    {
         if(n<12&&n!=10) return true;
         if(n>100&&n<1000&&n/100==n%10) return true;
         if(n>10000&&n/1000==n%10*10+n/10%10) return true;
         return false;
    }
    int main(int argc,char * argv[])
    {
        int n;
        while(cin>>n)
        {
            cout<<(n<100000&&isSym(n)&&isPrime(n)?"Yes
    ":"No
    ");
        }
        system("pause");
        return 0;
    }
    

    运行结果:

  • 相关阅读:
    最大相邻差值 数学 桶排序
    hdu-1536 S-Nim SG函数
    博弈论初步(SG函数)
    hdu-5009 Paint Pearls DP+双向链表 with Map实现去重优化
    hdu-5015 233 Matrix 矩阵快速幂
    hdu-1430 魔板 康拓展开+映射优化
    hdu-1043 bfs+康拓展开hash
    康拓展开-排列的hash
    Daily Scrum 12.23
    Daily Scrum 12.22
  • 原文地址:https://www.cnblogs.com/cysolo/p/3381075.html
Copyright © 2020-2023  润新知