解题报告 之 HOJ2276 SOJ2498 Count prime
来源:互联网 发布:哪些外卖软件首单立减 编辑:程序博客网 时间:2024/06/06 01:29
解题报告 之 HOJ2276 SOJ2498 Count prime
Description
Given an integer interval [L, R](L <= R <= 2147483647, R - L <= 1000000), please calculate the number of prime(s) in the interval.
InputThere is one line in the input, which contains two integer: L, R.
OutputThere is only one line , which contains the number of prime(s) in the interval.
Sample Input2 11Sample Output
5
题目大意:输出[L,R]之内素数的个数,其中R-L不超过1e6。
分析:这道题L,R的范围很大,用普通素数筛根本无法解决,于是很明显是一道区间素数筛题。大体思想是先求出小范围的素数,然后用小范围的素数去筛大数小区间内的素数。然后统计大数小区间内的素数个数即可。具体步骤是,先取得>=a的第一个素数,然后从素数的两倍开始筛。最后统计一下大数小区间内的素数个数即可。
上代码:
#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int MAXN = 50000;const int MAXM = 1e6 + 10;typedef long long ll;int isprime[MAXN]; //小数字素数判定int isprimeB[MAXM]; //大数素数判定ll prime[MAXN];//小素数ll primeB[MAXM];//大素数int cnt,cntB;void getP() //线性素数筛,比普通筛更快{for(int i = 1; i < MAXN; i++)isprime[i] = 1;for(int i = 2; i < MAXN; i++){if(isprime[i]){prime[cnt++] = i;}for(int j = 0; j < cnt&&prime[j] * i < MAXN; j++) //采用最小质因子和剩余质因子积的策略来筛{isprime[prime[j] * i] = 0;if(i%prime[j] == 0) break;}}}void getIntP(ll a,ll b) //区间素数筛{for(int i = 0; i <= b - a; i++) isprimeB[i] = 1;int k;for(int i = 0; i < cnt&&prime[i]*prime[i]<=b; i++){k = a / prime[i];if(k*prime[i] < a) k++; //求>=a的第一个素数if(k <= 1) k++; //如果k==1则表示是第一个质数,当然不能筛掉,事实上k不可能等于0while(k*prime[i] <= b){isprimeB[k*prime[i] - a] = 0;//筛着走k++;}}cntB = 0;for(int i = 0; i <= b - a; i++){if(isprimeB[i])primeB[cntB++] = i + a;}}int main(){ll a, b;getP();while(cin >> a >> b){ll ans = 0;if(b < MAXN){for(int i = a; i <= b; i++)if(isprime[i]) ans++;}else{cntB = 0;getIntP( a, b );for(int i = 0; i <= b - a;i++)if(isprimeB[i])ans++;}cout << ans << endl;}return 0;}
数论素数篇基本上完结了,下一板块就是poyal和容斥定理。。同余方程,,好想死。,
0 0
- 解题报告 之 HOJ2276 SOJ2498 Count prime
- [bzoj3956]Count 解题报告
- bzoj3956 Count 解题报告
- [bzoj4664] Count 解题报告
- usaco Prime Cryptarithm 解题报告
- 2777 Count Color 解题报告
- HDU Count 101 解题报告
- LeetCode-Count Primes-解题报告
- 【LeetCode】 Count Primes 解题报告
- Count Primes [LeetCode 解题报告]
- POJ 3518 Prime Gap 解题报告
- 杭电 “Prime Bases ”解题报告
- POJ-3126 Prime Path 解题报告
- HDU1016 Prime Ring Problem 解题报告--dfs
- UVA 12542 Prime Substring 解题报告
- hdu 1973 Prime Path 解题报告
- Prime Path(POJ 3126)解题报告
- HDOJ-2136-Largest prime factor 解题报告
- 软件人生之这些年做项目带新人的经验总结 - 仅供参考
- NSString转Byte[]
- world文件读写
- 从今天开始
- js错误处理与调试理论和办法
- 解题报告 之 HOJ2276 SOJ2498 Count prime
- 仿QQ聊天界面<一>
- 动态规划之防卫导弹
- gdb使用方法简介
- 最近的一些创业点滴的记录2
- [Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]
- C++虚函数和虚继承浅析
- 设计模式(5)——单例模式
- Oracle 11G 卸载问题