当前位置: 首页 > news >正文

oj 素数个数 难

思路:先设立一个2~sqrt(r)小素数数组,只要用<=sqrt(r)的素数,就可以筛掉[L,R]中所有的合数(因为一个合数的最小质因数一定小于等于它的平方根),标记这个小素数组可以用埃筛;第二部就是对[L,R]中的合数进行筛出,可以见代码

// 初始化区间 [L, R] 的标记数组(使用静态数组)int is_prime[MAX_RANGE];for (int i = 0; i <= R - L; i++) {is_prime[i] = 1;//默认全为质数}// 用每个小素数 p 筛除区间内的合数for (int i = 0; i < small_primes_count; i++) {int p = small_primes[i];// 找到区间内第一个 >= L 且能被 p 整除的数int start = fmax(p * p, (( (L/p) + 1) * p));//对l/p向上取整再乘p,保证start再[L,R]内for (int multiple = start; multiple <= R; multiple += p) {is_prime[multiple - L] = 0;//一个个找它们倍数}}

这个思路的好处就是,即使R最大可能为1e9,但也只需要小质数数组里面最大求出不到1e5范围内的质数,然后一个个找他们的倍数


AC代码:

#include <stdio.h>
#include <math.h>#define MAX_RANGE 1000001  // 因为 R - L <= 10^6,所以最大需要 10^6 + 1 大小的数组// 计算区间 [L, R] 内的素数个数
int countPrimes(int L, int R) {// 处理 L=1 的特殊情况,1 不是素数if (L == 1) {L = 2;}// 计算 sqrt(R),确定小素数的范围int sqrt_R = (int)sqrt(R);// 筛出所有 <= sqrt(R) 的素数(使用静态数组)int small_primes[MAX_RANGE];  // 足够大的数组存储小素数int small_primes_count = 0;int is_small_prime[MAX_RANGE];  // 标记是否为小素数for (int i = 0; i <= sqrt_R; i++) {is_small_prime[i] = 1;}is_small_prime[0] = is_small_prime[1] = 0;for (int i = 2; i <= sqrt_R; i++) {if (is_small_prime[i]) {small_primes[small_primes_count++] = i;for (int j = i * i; j <= sqrt_R; j += i) {is_small_prime[j] = 0;}}}// 初始化区间 [L, R] 的标记数组(使用静态数组)int is_prime[MAX_RANGE];for (int i = 0; i <= R - L; i++) {is_prime[i] = 1;}// 用每个小素数 p 筛除区间内的合数for (int i = 0; i < small_primes_count; i++) {int p = small_primes[i];// 找到区间内第一个 >= L 且能被 p 整除的数int start = fmax(p * p, (( (L+p-1)/p) * p));for (int multiple = start; multiple <= R; multiple += p) {is_prime[multiple - L] = 0;}}// 统计素数个数int count = 0;for (int i = 0; i <= R - L; i++) {if (is_prime[i]) {count++;}}return count;
}int main() {int T;scanf("%d", &T);while (T--) {int L, R;scanf("%d %d", &L, &R);printf("%d\n", countPrimes(L, R));}return 0;
}

http://www.dtcms.com/a/569510.html

相关文章:

  • 全球前10网站开发语言百度做网站需要多少钱
  • Affinity三大专业工具整合免费开放
  • ZSAR配置PDUR模块
  • 基于springboot的校园社团信息管理系统开发与设计
  • 鹿寨县住房和城乡建设局网站网站改版 英文
  • 为什么Redis的操作是原子性的?如何保证原子性的?
  • C++17 异构(tuple)与多模态数据结构(variant)
  • 【SpringBoot】玩转 Spring Boot 日志:级别划分、持久化、格式配置及 Lombok 简化使用
  • 火山引擎数智平台VeDI重磅发布“AI助手”:以大模型驱动数据飞轮,赋能非技术人员高效“看数、用数”
  • 前言:可视化搭建诞生背景 什么是可视化
  • 个人博客网站怎么注册网站怎么做会员系统
  • 山东省建设厅招标网站首页c可以做网站吗
  • 【Solidity 从入门到精通】第3章 Solidity 基础语法详解
  • 【仓颉纪元】仓颉实战深度复盘:21 天打造鸿蒙天气应用
  • Idea(2023版)使用Svn
  • windows SVN 修改提交作者、提交注释、提交日期
  • 网站空间购买哪家好wordpress 字体颜色
  • 网站定制哪个好建筑模板厚度一般是多少
  • 专门型网站wordpress无法设置语言包
  • 在windows下使用vscode进行cuda编程
  • 复变函数与积分变换 第一章——复数与复变函数
  • 告别预训练:清华大学πRL实现机器人“在实践中进化”的通用解决方案
  • U8/发票请款未发现符合条件的单据
  • 本地赣州网站建设ui界面设计案例分析
  • 【生成模型(一)】Score-Based Generative Models
  • Erasmus Glioma Database (EGD)数据集下载
  • FeatEnHancer:在低光视觉下增强目标检测及其他任务的分层特征
  • 网站建设流程及构架郑州网站建设推广渠道
  • QuickData
  • 和网站开发公司如何签合同world做网站怎么做连接