zjut_1181 对称三位数素数

本文介绍了一种判断对称三位素数的方法,通过筛选法高效判断素数,并结合数学运算验证数字对称性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description:

判断一个数是否为对称三位数素数。 所谓“对称”是指一个数,倒过来还是该数。例如,375不是对称数,因为倒过来变成了573。

Time Limit:1000MS  Memory Limit:32768K

Input:

输入数据含有不多于50个的正整数(0<n<2^32)。

Output:

对于每个n,如果该数是对称三位数素数,则输出“Yes”,否则输出“No”。每个判断结果单独列一行。

Sample Input:

11 101 272

Sample Output:

No
Yes 
No

题解
           素数即质数,除了1和它本身,不能被其他自然数整除,2是最小的素数。
           一开始的想法太幼稚了,居然认为不能被2、3、5、7整除的数就是素数,而事实上素数至少不能被比自己小的数整除。

           因此,本题采用筛选法判断素数,以1,000,000之内的数为例,先开一个大小为1,000,0005的数组(多出来的5是为了防止暴栈)。在这里我们约定,若p[i]=0,则i是素数;若p[i]=1,则i是合数。首先,将p中的元素全部初始化为0,即默认全部为素数。然后将p中下标为i的倍数的元素全部置为1,因为素数的任意倍数都是合数。

          注意:这里p[j]=1的操作是从i*i开始进行,而不是从i+i开始,那么i+i到i*i之间的数是不是被漏判了呢?其实某个比i小的数已经做过这个判断了,因为必定存在一个数x<i,使得 i+i<=x*n<=i*i (n>=x). 所以这样的算法更加高效。

          接下来就是判断这个三位素数是否是对称的了,采用一种通用方法,百位数字=n/100 (因为n是整数,所以除法得到的小数被略去),个位数字=n%10,若n/100==n%10,则该素数对称。

          下面就是代码实现阶段啦,这里用到了memset函数,通常用于初始化新申请的内存,需要引入头文件<cstring>.
          其函数原型为:  void *memset(void *s, int ch, size_t n);
                函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s.

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int p[1000005];

void IsPrime();
int main()
{
    IsPrime();
    int n;
    while(cin>>n)
    {
        if(n<100||n>999) cout<<"No"<<endl;
        else
        {
             if (p[n]==0)
            {
                      if(n/100==n%10) cout<<"Yes"<<endl;
                      else cout<<"No"<<endl;
            }
             else cout<<"No"<<endl;
        }
    }
    return 0;
}

void IsPrime()
{
    memset(p,0,sizeof(p));
  p[0]=1;
  p[1]=1;
  for(int i=2;i<=sqrt(1000000);i++)
    if(p[i]==0)
    { //合数的最小素因子一定不超过它的平方根
        for(int j=i*i;j<=1000000;j+=i)
                 p[j]=1;
    }
}


### 浙江工业大学计算机网络原理课程资料与教学资源 浙江工业大学自2020年起调整了计算机专业的研究生入学考试科目,其中包含了数据结构和计算机网络两门核心课程[^1]。这表明学校对于计算机网络原理的教学非常重视。 #### 课程教材推荐 通常情况下,高校开设的《计算机网络》课程会选用经典的教科书作为主要参考资料。例如,《Computer Networking: A Top-Down Approach》以及国内广泛使用的谢希仁主编的《计算机网络》都是不错的选择。虽然具体到浙江工业大学可能有特定指定版本,但这些书籍可以作为一个很好的起点来理解该领域基础知识。 #### 在线学习平台 为了帮助学生更好地掌握知识点,许多大学都会利用在线教育平台发布配套视频讲座和其他多媒体形式的学习材料。建议访问学校的官方网站或联系授课教师获取官方认可的学习链接。此外,像中国大学MOOC这样的公共平台上也可能存在由该校或其他知名院校提供的相关公开课。 #### 实验室实践机会 根据以往经验,在完成理论部分之后,参与实际操作练习是非常重要的环节之一。浙江工业大学可能会设置专门针对本学科方向的学生开放实验室时间表,允许他们在指导下进行路由配置、网络安全测试等方面的动手实验活动。这类实践活动有助于加深对抽象概念的理解程度。 ```bash # 如果想要进一步了解具体的实验安排, # 可以尝试通过邮件咨询相关部门负责人。 echo "发送电子邮件至cs@zjut.edu.cn询问更多详情" ``` #### 学术交流论坛 积极参与学术讨论也是提高个人能力的有效途径之一。加入一些活跃于互联网上的专业技术社区(如GitHub Discussions、Stack Overflow等),不仅可以与其他爱好者分享见解,还能够及时了解到行业内的最新动态和发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值