题目链接
https://pintia.cn/problem-sets/994805260223102976/problems/994805318855278592
题解一
根据题意,素数对有两个特点:差为2、相邻,所以我们可以从3开始枚举每一对数字,然后再判断它们两个是不是素数。
这道题刚开始还是有一个点超时(TLE)了,主要原因有三点:
枚举方法太low,没有利用偶数不可能是素数这一性质。(题解一已处理)
我刚开始是枚举的是3,5、4,6、……;后来改成了3,5、5,7、……
判断素数方法太low,用sqrt较好,当然也有更快的方法。(题解一已处理)
- for循环中可能重复判断5是不是素数(让我想起来了动态规划..…),增加了时间复杂度(题解一未处理,在题解二中处理)
在网上查题解发现我在判断素数的时候也忘记了处理1不是素数和2是素数的情况。
1 | // PAT BasicLevel 1007 |
题解二
针对题解一中重复判断5是否为素数的问题,我们至少有两种方法解决:
- 建一个数组存储所有素数
- 用一个变量存储上一个素数且不断更新
网上搜到的题解有方法一,也有方法二,这里采用后者。
1 | // PAT BasicLevel 1007 |
作者:@臭咸鱼
转载请注明出处:https://chouxianyu.github.io
欢迎讨论和交流!