当前位置:
首页 >
满分最优解法:1007 素数对猜想 (20分)
发布时间:2024/2/28
50
豆豆
生活随笔
收集整理的这篇文章主要介绍了
满分最优解法:1007 素数对猜想 (20分)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
立志用更少的代码做更高效的表达
Pat乙级最优化代码+题解+分析汇总——>传送门
让我们定义dn
为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
解题思路
本题的核心考点为:筛选法求某一区间的素数。
说明:筛选法可求某一数字区间的所有数字是否为素数, 且时间复杂度极低。
应用场景: 打表。 事先定义数组,利用筛选法,求得该数组所有数字下标是否为素数。 为接下来的判断操作做准备。
理解筛选法后, 本体就很好做了, 只需要判断是否差值为2即可。
代码展示
#include<iostream> #include<cmath> #define Max 100005 using namespace std; int a[Max];void Sifting() { //筛选法求素数a[1] = a[0] = 1;for(int i = 2; i < sqrt(Max); i++) if(a[i] == 0) for(int j = i*2; j <= 100005; j+=i) a[j] = 1; }int main() {Sifting();int n; cin>>n;//sum记录上一个质数,与这个质数比较是否差值为2; num代表差值为2素数对的个数 int sum = 3, num = 0; for(int i = 0; i <= n; i++) if(a[i] == 0) {if(i-sum==2) num++; sum = i;}cout << num << endl; return 0; }每日一句
惟正己可以化人,唯尽己可以服人。
总结
以上是生活随笔为你收集整理的满分最优解法:1007 素数对猜想 (20分)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Dev C++ 无法调试问题的解决——小
- 下一篇: 极高效代码(C语言):1008 数组元素