题意:

求[a,b]之间的素数的个数

数很大。。。数组开不起

所以要想到转化

因为小于等于b的合数的最小质因子 一定小于等于sqrt(b),所以只需要求出来[0,sqrt(b)]的素数  然后取倍数删去[a,b]之间的合数  就好了

那  为什么小于等于b的合数的最小质因子 一定小于等于sqrt(b)呢?

因为b是最大的, 所以只讨论b即可 我们来看b的因子 。。一定是从 [0,sqrt(b)] 和 [sqrt(b),b]这两个区间里各取一个

先来看[0,sqrt(b)] 如果在这里取得是一个合数 则这个合数可由比它小的质数组成  所以只讨论质数即可  然后求倍数。。删除[a,b]之间的合数

为什么不看 [sqrt(b),b]  因为如果取一个这个区间的数去求倍数删除[a,b]之间的合数的话 ,这个倍数一定是在 [0,sqrt(b)]这个区间的。。。

所以小于等于b的合数的最小质因子 一定小于等于sqrt(b)

代码如下:

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define maxn 100009
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int LL_INF = 0x7fffffffffffffff,INF = 0x3f3f3f3f;
LL primes[maxn];
bool vis[maxn], bz[maxn];
int ans = ;
void init()
{
mem(vis,);
vis[] = ;
for(int i=; i<maxn; i++)
if(!vis[i])
{
primes[ans++] = i;
for(LL j=(LL)i*i; j<maxn; j+=i)
vis[j] = ;
}
} int main()
{
init();
int T;
int kase = ;
LL a, b;
cin>> T;
while(T--)
{
int res = ;
mem(bz,);
cin>> a >> b;
// if(a <= 2) a = 2;
int len = b - a;
for(int i=; i<ans && primes[i] * primes[i] < b; i++)
{
int j = a/primes[i];
if(j*primes[i] < a) j++; // 我们要找到第一个大于等于a的合数,因为出的时候是向下取整 所以要判断一下
if(j == ) j++; // 如果j == 1 则说明 a是一个质数 但我们要找合数
while(j * primes[i] <= b)
        {
bz[j*primes[i] - a] = ;
j++;
} }
if(a == ) bz[] = ; // a == 1时要特殊讨论 因为1不是一个合数,无法由比它小的质数组成,也不是一个质数,所以在标记bz数组时 没有标记 就会多算
for(int k=; k<=len; k++)
if(!bz[k])
res++; printf("Case %d: %d\n",++kase,res); } return ;
}

最新文章

  1. VS中设置#define _CRT_SECURE_NO_WARNINGS的两种方式
  2. 工作随笔记 点击除div自身之外的地方,关闭自己
  3. python的深拷贝和浅拷贝
  4. Android应用资源--之属性(Attribute)资源
  5. AngularJs--过滤器(filter)
  6. Android进阶篇-内存管理
  7. 致改变——总结&amp;规划(2016&#183;一)
  8. Visual format language
  9. IOS开展:导航中添加多个button并加入左侧logo
  10. 开发现代ASP.NET应用程序
  11. win10安装配置vs community 2015+opencv3.1.0
  12. WEB框架-Django框架学习-关联管理器(RelatedManager)
  13. 进行API开发选gRPC还是HTTP APIs?
  14. 关于snmp octet string和普通string问题
  15. OTP
  16. Linux 查看CPU信息,机器型号,内存等信息
  17. mssql借助链接服务器进行数据快速迁移
  18. codevs 5929 亲戚
  19. linux达人养成计划学习笔记(三)—— 帮助命令
  20. 【前端】javascript+jquery实现手风琴式的滚动banner或产品展示图

热门文章

  1. 解决Skyline 6.5版本中3DML模型单体化后外部网页挂接问题
  2. openMP多线程编程
  3. python语言程序设计8
  4. 异步编程(async&amp;await)
  5. centos下升级git版本的操作记录
  6. svn代码发版的脚本分享
  7. ecna2017-Game of Throwns
  8. 软工个人博客-week7
  9. 《Linux内核分析》实践4
  10. logstash 解析日志文件