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