湘大 XTU OJ 1345 素数字符串 题解:欧拉筛法 前缀和 ‘\0‘ sprintf

news2024/11/26 4:49:20

链接

素数字符串

题目

题目描述

我们将素数从小到大依次书写,可以得到一个字符串"23571113⋯",已知一个数码d(0≤d≤9),求字符串在区间[L,R]之间的多少个d?

输入

第一行是一个整数T(1≤T≤10000),表示样例的个数。 每个样例是一行, 为3个整数,区间L,R,(1≤L≤R≤1000000)和数码d。 区间从1开始计数。

输出

每行输出一个样例的结果。

样例输入

2
1 8 1
1 8 4

样例输出

3
0

代码

#include<iostream>
#include<cstring>

using namespace std;

bool isprime[2100000];//这个为什么要2100000,开成1100000,为啥不行,或者说这个要怎么
//设置,我开大一点就超出空间限制了
int prime[110000];
int res[11][1100000];

void oula()
{
	int cnt=0;
	memset(isprime,true,sizeof(isprime));
	
	isprime[0]=isprime[1]=false;
	
	for(int i=2;i<2100000;i++)
	{
		if(isprime[i])	prime[++cnt]=i;//从1开始计数
		
		for(int j=1;j<=cnt&&i*prime[j]<2100000;j++)
		{
			isprime[i*prime[j]]=false;
			if(i%prime[j]==0)	break;
		}
	}
}

void prime_table()
{
	char s[11];
	int count=0;
	for(int i=1;prime[i]!=0;i++)
	{
		memset(s,'\0',sizeof(s));
		sprintf(s,"%d",prime[i]);
		
		for(int j=0;s[j]!='\0';j++)
			for(int k=0;k<=9;k++)
				if(s[j]==(char)(k+48))	res[k][count+j+1]=1;
		
		count+=strlen(s);
	}
}

void front_sum()
{
	for(int i=0;i<=9;i++)
		for(int j=1;j<=1100000;j++)
			res[i][j]+=res[i][j-1];
}

int main()
{
	oula();
	prime_table();
	front_sum();
	
	int t;
	scanf("%d",&t);
	
	while(t--)
	{
		int l,r,d;
		scanf("%d%d%d",&l,&r,&d);
		
		printf("%d\n",res[d][r]-res[d][l-1]);
	}
	
	return 0;
}

总结

1. '\0'是什么意思:

'\0'表示空字符,是判断字符串结束的标志,它的ASCII数值是0 

#include<iostream>

using namespace std;

int main()
{
	printf("%d",'\0');
	
	return 0;
}

参考链接:c语言中‘\0‘ ,‘0‘, “0“ ,0的区别

2.欧拉筛法

#include<iostream>
#include<cstring>

using namespace std;

const int N=1e8;

bool isprime[N];
int prime[N];

int n,cnt;

void oula()
{
	memset(isprime,true,sizeof(isprime));
	
	isprime[0]=isprime[1]=false;
	
	//cnt=0;
	
	for(int i=2;i<=n;i++)
	{
		if(isprime[i])	prime[++cnt]=i;
		
		for(int j=1;j<=cnt&&i*prime[j]<=n;j++)
		{
			isprime[i*prime[j]]=false;
			if(i%prime[j]==0)	break;
		}
	}
}

int main()
{
	scanf("%d",&n);
	
	oula();
	
	for(int i=1;i<=cnt;i++)
		printf("%d ",prime[i]);
	
	return 0;
}

参考链接:【算法/数论】欧拉筛法详解:过程详述、正确性证明、复杂度证明

3.sprintf函数的使用

相当于把双引号里面的内容输出到数组里面保存,并且是把一个一个字符存在数组里面

#include<iostream>
#include<stdio.h>

using namespace std;

int main()
{
	int a=12345;
	char s[10];
	
	sprintf(s,"%d",a);
	
	printf("%s",s);
	
	printf("\n");
	
	printf("%c",s[0]);
	
	return 0;
}

比如说这个代码是把整型变量a存在字符串数组s里面 

参考链接:2.C语言基础-sprintf函数用法 

4. i++和++i是有区别的,i++是使用自增之前的数值,++i是使用自增之后的数值,前缀和一般从1开始计数比较方便,所以

res[k][count+j+1]=1;

加上一,从1开始计数

5.这个分为三个函数,第一个函数是欧拉筛法,第二个函数是素数打表,第三个函数是求前缀和,前缀和的公式:前缀和 

6.欧拉筛法前面说了,是一个时间复杂度是线性的模板

7.素数打表,遍历每一个素数,把每一个素数转换成数组元素,意思是12345转换成‘1’‘2’‘3’‘4’‘5’ 存在数组里面,然后遍历这个数组,再遍历0-9每一个数字,如果相等就把计数的二维数组的对应位置标记为1,在遍历数组,遍历0-9循环外面,计算一个count,等于这个数组实际使用到的长度,这样可以使得标记的位置不会重叠,二维数组的指针会不断的往后移动(可以这么理解)

8.前缀和,二维数组行列,不看行就是普通的前缀和,对每一列使用前缀和的预处理

9.最后调用前缀和公式就可以解决这个题目

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/903785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Next.js 13 你需要了解的 8 件事

目录 React 服务器组件 &#xff08;RSC&#xff09;服务器组件默认开启在 Next.js 中客户端组件也在服务器上呈现&#xff01;组成客户端和服务器组件编译Next.js 13 渲染模式桶文件有点坏了库集成&#xff1a;WIP 仍在进行中Route groups 路由组总结 在本文中&#xff0c;我们…

外贸邮箱签名怎么写?改版提升点击率的关键技巧揭秘!

外贸业务常用的一种营销工具就是电子邮件&#xff0c;而电子邮件的签名作为邮件信任度和品牌价值的体现&#xff0c;同样也是非常重要的。那么如何写一份优秀的外贸邮箱签名呢&#xff1f; 下面是几点建议。 第一&#xff0c;突出品牌形象。在签名中加入公司标志或相关图片可以…

【物联网无线通信技术】NFC从理论到实践(FM17XX)

NFC&#xff0c;全称是Near Field Communication&#xff0c;即“近场通信”&#xff0c;也叫“近距离无线通信”。NFC诞生于2004年&#xff0c;是基于RFID非接触式射频识别技术演变而来&#xff0c;由当时的龙头企业NXP(原飞利浦半导体)、诺基亚以及索尼联合发起。NFC采用13.5…

【ElasticSearch】一键安装IK分词器无需其他操作

要注意的时下面命令中的es是我容器的名称&#xff0c;要换成你对应的es容器名 docker exec -it es /bin/bash # 进入容器 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis- ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.1…

Lookup Singularity

1. 引言 Lookup Singularity概念 由Barry WhiteHat在2022年11月在zkResearch论坛 Lookup Singularity中首次提出&#xff1a; 其主要目的是&#xff1a;让SNARK前端生成仅需做lookup的电路。Barry预测这样有很多好处&#xff0c;特别是对于可审计性 以及 形式化验证&#xff…

Dynamic CRM开发 - 实体字段(一)

字段介绍 Dynamic CRM中&#xff0c;实体是CRM业务数据的基本载体&#xff0c;而字段对于实体同样重要&#xff0c;是其核心部分。 CRM中新增实体后&#xff0c;系统会默认为实体创建一些不可编辑&#xff0c;不可删除的字段&#xff0c;如&#xff1a;主键&#xff0c;创建时…

vue路由及打包部署

vue路由&#xff08;前端路由&#xff09;&#xff1a;URL中的hash&#xff08;#号&#xff09;与组件之间的对应关系。 一、安装vue路由 npm install vue-router3.5.1 二、定义路由表 路由表主要记录hash&#xff08;#号&#xff09;与组件之间的对应关系。主要定义在route…

解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题

如果使用SES调试NRF52840的时候发现&#xff0c;官方例程只能显示CPU寄存器&#xff0c;但是无法显示外设寄存器时&#xff0c;解决办法如下&#xff1a; 1.在解决方案右键→Options→Debug→Debugger&#xff0c;然后Target Device选择正确的型号。 2.Register Definition Fil…

RT-Thread 的环形缓冲区 ---- 镜像指示位

可以看一下这篇我写的博客&#xff0c;了解一下大概&#xff1a; RingBuffer 环形缓冲区----镜像指示位_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/132340883?spm1001.2014.3001.5501 【回顾】缓冲区…

Git的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践

Git是一个版本控制系统&#xff0c;用于跟踪和管理软件开发项目中的代码变更。它可以追踪文件的修改、添加和删除&#xff0c;并记录这些变更的历史。Git可以帮助团队成员协同开发&#xff0c;并提供了一种有效的方式来处理并发编辑和代码合并。 在这篇文章中&#xff0c;我们将…

大数据-玩转数据-Flink

一、说明 在电商网站中&#xff0c;订单的支付作为直接与营销收入挂钩的一环&#xff0c;在业务流程中非常重要。对于订单而言&#xff0c;为了正确控制业务流程&#xff0c;也为了增加用户的支付意愿&#xff0c;网站一般会设置一个支付失效时间&#xff0c;超过一段时间不支…

大数据从入门到放弃——浅谈数据架构的前世今生

文章目录 1. 背景2. 数据的定义及分类2.1 数据的定义2.2 数据的分类2.3 数据和信息的区别 3. 数据的作用4. 数据的那些美好时代4.1 人脑时代4.2 文件时代4.3 数据库时代4.3.1 大服务器时代4.3.2 读写分离时代4.4 数据库的分布式时代4.5 云端时代 5. 数据的未来 1. 背景 随着云时…

excel 核心快捷键用法

1、wps怎样只复制公示计算出来的数据 1.1、按下快捷键“CtrlC”&#xff0c;复制该单元格。 1.2、按下快捷键“ShiftCtrlV”&#xff0c;即“粘贴为数值”&#xff0c;即可只复制数字而不复制该单元格的公式 1.3、wps怎样只复制公示计算出来的数据_百度知道https://zhidao.baid…

【福建事业单位-综合基础知识】05民法典

这里写自定义目录标题 一、民法概述概念原则总结 二、自然人概念总结 三、民事法律行为总结 民法考察2-4题&#xff08;重点总则篇&#xff09; 一、民法概述 概念原则 总结 二、自然人 概念 总结 三、民事法律行为 总结

【python】正则表达式

本文介绍正则表达式常用的用法。 有哪些正则字符 正则表达式中有各种各样的正则字符&#xff0c;用于匹配不同情况下的字符串。具体如下&#xff1a; 使用 re 模块进行字符串匹配 比如&#xff0c;我们要从 ‘Xiaoshuaib has 100 bananas’ 中匹配一个数字&#xff0c;可…

Zoho Books的安全性和数据保护:财务信息安全的保障措施揭秘

在信息化时代&#xff0c;如何保障企业信息安全是十分重要的问题&#xff0c;尤其是财务信息。财务管理工具的安全性是否有保障是许多用户担心的问题。 Zoho Books财务管理工具为客户提供了一系列的数据保护和安全措施&#xff0c;以确保客户财务信息的安全。 1. 采用高度加密…

漏洞指北-VluFocus靶场专栏-工具篇

漏洞指北-VluFocus靶场专栏-番外篇奇技淫巧 &#x1f338;1、burp suite 、中国蚁剑工具、Strut2扫描软件地址&#x1f338;&#x1f338;2、burp suite使用&#x1f338;step1 浏览器开启代理&#xff0c;**推荐使用&#xff1a;SwitchyOmega** step2 确认浏览器端口和burp su…

LeetCode 542. 01 Matrix【多源BFS】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…