回文质数的思考

本文详细讨论了如何判断一个数是否为回文,并介绍了两种判断质数的方法:简单线性筛和快速线性筛。同时,文章指出在寻找回文质数时,需要注意避免合数与较大质数相乘导致的重复计算问题。提供了相关代码和题目链接作为参考。

判断回文方法 1.

  1. :确定一个数的各位储存在数组里,再对应匹配:从个位开始储存在栈中,直到1/2的位数,再将比1/2的位数高的那些位拿出来匹配,栈top–,直到top=0;

判断十进制位数方法

  1. while 循环 2
  2. (int)log10(n);

判断质数方法

  1. for循环 2到i*i<n,1,2特判
  2. 简单线性筛:book[0]=1,book[1]=1,用for遍历2~n , 小于等于n大于2的所有2的倍数设为合数(book[2k]=1)(用while),再除3以外3的所有倍数设为合数(book[3k]=1),4因为是合数跳过(book[4]==1)…,若book[k]==0为质数,反则为合数。
  3. 快速线性筛:同样先0,1去除,遍历2~n,从2开始的每个数按一定的方式和小于它的一些数相乘,这些相乘得到的合数的book设为1,以达到避免重复计算合数的目的。(如在简单线性筛中36=218=312还带来重复计算,我们需要找到一种优化的方法不会重复筛除一个合数)
    那么这种方法前人已经提出:
    如果i为素数, i 乘以不大于 i 的素数得到的合数book=1;
    如果i为合数,将合数和它的最小质因数相乘得到的合数book=1;
    如果是一个质数和他之前全部质数相乘,如果是奇合数和在包括它最小质因子之前的质因数相乘,如果是偶合数和2相乘

2 * 2 , 3 * 2 , 3 * 3 , 4 * 2,5 * 2,5 * 3 ,5 * 5 , 6 * 2 , 7 * 2 , 7 * 3 , 7 * 5 , 7 * 7…

这些合数会包括

  1. 所有两个质数的乘积(15=31*51
  2. 合数和它最小质因子的乘积(16=8*2)

合数 * 最小质数=合数,,
而不让合数 * 其他大一丢的质数
若允许43=(2 * 2) * 3=12则62=(2 * 3) * 2=12重复,
这表明该合数i=p1 * p2 * … * pn若和大一丢的质数ps相乘,则存在大于i的合数i’=p2p3…pnps使得i’p1和ips相等导致重复(说明合数不需要去和大的质数或者合数相乘,因为该相乘得到合数可以通过某一个合数和它的最小质数相乘得到)
(前面的合数 i=p1 * p2
…*pn, //pi都是素数(2<=i<=n), pi<=pj ( i<=j ))

代码参考
https://blog.youkuaiyun.com/dinosoft/article/details/5829550
题目参考(luoguo1217)
https://www.luogu.com.cn/problem/P1217
题解参考
https://www.luogu.com.cn/problemnew/solution/P1217

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值