蓝桥杯准备 【入门3】循环结构

news2025/2/8 13:55:08

素数小算法(埃氏筛&&欧拉筛)

以下四段代码都是求20以内的所有素数

1.0版求素数
#include<iostream>
using namespace std;

int main() {
    int n = 20;
	for(int i=2;i<=n;i++)
	{
	    int j=0;
	    for(j=2;j<=i;j++)//遍历i
	    {
			if(i%j==0)
			{
				break;
			}
		}
		if(i==j)
		{
			cout<<i<<endl;
		}
	}
    return 0;
}
2.0版(最爱的一版)

任何合数是两个数相乘得的,很明显,其中一个数必小于等于sqrt(合数),所以我们在上一段代码的基础上,只遍历2-sqrt(该数)即可

#include<iostream>
using namespace std;

int main() {
    int n = 20;
	for(int i=2;i<=n;i++)
	{
	    int j=0;
	    for(j=2;j*j<=i;j++)//遍历一部分
	    {
			if(i%j==0)
			{
				break;
			}
		}
		if(j*j>i)
		{
			cout<<i<<endl;
		}
	}
    return 0;
}
3.0版(埃氏筛)

就这样把质数的倍数,一点点false掉

#include<iostream>
using namespace std;
int main()
{
	int n=20;
	bool isprime[n+1];
	for(int i=0;i<n+1;i++)
	{
		isprime[i]=true;
	}
	isprime[0]=false;isprime[1]=false;
	for(int i=2;i<n+1;i++)
	{
		if(isprime[i])
		{
			for(int j=i*i;j<n+1;j+=i)
			{
				isprime[j]=false;
			}	
		}	
	}
	for(int i=0;i<n+1;i++)
	{
		if(isprime[i])
		{
			cout<<i<<endl;
		}
	}
	return 0;
}
4.0版(欧拉筛)

跟上一个埃氏筛,不会重复,也是一点点false掉筛去

#include<iostream>
using namespace std;

int main() {
    int n = 20;
    bool isprime[n + 1];
    int primes[n + 1];  
   
    for (int i = 0; i <= n; i++) {
        isprime[i] = true;
    }
    isprime[0] = false;isprime[1] = false;

    int prime_count = 0;  

    for (int i = 2; i <= n; i++) {
        if (isprime[i]) {
            primes[prime_count] = i;  
			prime_count++;
        }

        for (int j = 0; j < prime_count && primes[j] <= n / i ; j++) {
            isprime[primes[j] * i] = false;

            if (i % primes[j] == 0) {
                break;
            }
        }
    }

    for (int i = 2; i <= n; i++) {
        if (isprime[i]) {
            cout << i << endl;
        }
    }

    return 0;
}

P5723 【深基4.例13】质数口袋

题目描述

小 A 有一个质数口袋,里面可以装各个质数。他从 22 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。

口袋的负载量就是口袋里的所有数字之和。

但是口袋的承重量有限,装的质数的和不能超过 LL。给出 LL,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。

代码

注意特殊点1和0

解法一

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int sum=0;
	int prime[10000]={0};
	int c=0;
	for(int i=2;i<=100000;i++)
	{
		int j=0;
		for(j=2;j*j<=i;j++)
		{
			if(i%j==0)
			{
				break;
			}
		}
		if(j*j>i)
		{
			prime[c++]=i;
		}
	}
	int count=0;
	if(n>=2)
	{
		for(int i=0;i<c-1;i++)
		{
			cout<<prime[i]<<endl;
			sum+=prime[i];
			count++;
			if(sum+prime[i+1]>n)
			{
				break;
			}
		}
	}
	cout<<count<<endl;
}

解法二

#埃氏筛
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int sum=0;
	int prime[10000]={0};//储存素数
	bool isprime[100000];//判断素数

	for(int i=0;i<100000;i++)//全部置true
	{
		isprime[i]=true;
	}
	int c=0;
	isprime[0]=false;isprime[1]=false;//注意 0 1不是素数
	for(int i=2;i<=100000;i++)//开始筛选
	{
		if(isprime[i])
		{
			prime[c++]=i;
			for(long long j=(long long)i*i;j<100000;j+=i)
			{
				isprime[j]=false;//合数置假
			}
		}
	}
	int count=0;//计数
	if(n>=2)//注意n等于0 1 时应该输出0
	{
		
		for(int i=0;i<c-1;i++)
		{
			cout<<prime[i]<<endl;//输出
			sum+=prime[i];
			count++;
			if(sum+prime[i+1]>n)
			{
				break;
			}
		}
	}
	cout<<count<<endl;//输出
}

解法三

#欧拉筛
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int sum=0;
	int prime[10000]={0};
	bool isprime[100001];
	for(int i=0;i<=100000;i++)
	{
		isprime[i]=true;
	}
	int c=0;
	isprime[0]=false;isprime[1]=false;
	for(int i=2;i<=100000;i++)//筛
	{
		if(isprime[i])
		{
			prime[c++]=i;
		}
		for(int j=0; j < c && prime[j] <= 100000 / i;j++)
		{
			isprime[prime[j]*i]=false;
			if(i%prime[j]==0)
			{
				break;
			}
		}
	}
	int count=0;
	if(n>=2)
	{
		for(int i=0;i<c-1;i++)
		{
			cout<<prime[i]<<endl;
			sum+=prime[i];
			count++;
			if(sum+prime[i+1]>n)
			{
				break;
			}
		}
	}
	cout<<count<<endl;
}

P1217 [USACO1.5] 回文质数 Prime Palindromes

题目描述

因为 151151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151151 是回文质数。

写一个程序来找出范围 [a,b](5≤a<b≤100,000,000)[a,b](5≤a<b≤100,000,000)(一亿)间的所有回文质数。

代码

#include<iostream>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	int a[10]={0}; //数组储存每位数
	for(int i=n;i<=m;i++)
	{
		bool hui=true;//注意在此位置初始化hui为true
		int x=i;
		int c=0;
		while(x>0)
		{
			a[c++]=x%10;
			x=x/10;
		}
		for(int j=0;j<=c/2;j++)//判断是否是回文数
		{
			if(a[j]!=a[c-j-1])
			{
				hui=false;
				break;
			}
		}
		if(hui)//在回文的条件下判断是否是质数
		{	
			int j=2;
			for(j=2;j*j<=i;j++)
			{
				if(i%j==0)
				{
					break;
				}
			}
			if(j*j>i)
			{
				cout<<i<<endl;//输出
			}
		}
	}
}

P1423 小玉在游泳

题目描述

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 22 米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的 98%98%。现在小玉想知道,如果要游到距离 ss 米的地方,她需要游多少步呢。请你编程解决这个问题。

代码

普通方法

(窝感觉是暴力解法,hhh)

 #include<iostream>
 using namespace std;
 int main()
 {
 	double n;
 	cin>>n;
 	double s=2.0;
 	double sum=2.0;
	if(n<=2)//特判
	{
		cout<<"1"<<endl;
	}
	else if(n>2&&n<=100)
	{
	 	for(int i=2;i<=2000;i++)//从第二步开始算
	 	{
		 	s=s*0.98;
		 	sum+=s;
		 	if(sum>=n)
		 	{
			 	cout<<i<<endl;
			 	break;
			 }

		 }
	}
 }
数学方法

 #include<iostream>
 #include<cmath>
 using namespace std;
 int main()
 {
 	double n;
 	cin>>n;
 	double a=2.0;
 	double sum=2.0;
	if(n<=2)
	{
		cout<<"1"<<endl;
	}
	else if(n>2&&n<=100)
	{
		int x=ceil(log(1-1.0*(n*(1-0.98))/a)/log(0.98));//计算x
	 	for(int i=2;i<=x;i++)
	 	{
		 	a=a*0.98;
		 	sum+=a;
		 	if(sum>=n)
		 	{
			 	cout<<i<<endl;
			 	break;
			 }

		 }
	}
 }

P1420 最长连号

题目描述

输入长度为 nn 的一个正整数序列,要求输出序列中最长连号的长度。

连号指在序列中,从小到大的连续自然数。

 #include<iostream>
 #include<cmath>
 using namespace std;
 int main()
 {
 	int n;
 	cin>>n;
 	int a[n]={0};
	cin>>a[0];
	int f=a[0];
	int count=0;int b=0;
 	for(int i=1;i<n;i++)
 	{
	 	cin>>a[i];
	 	//判断是否连号
	 	if(f==a[i]-1)
	 	{
		 	count++;
		}
		else//否,次数置零
		{
			count=0;
		}
		//比较连号长度
		if(count>=b)
		{
			b=count;
		}	
		f=a[i];//重置f
	 }
	 b++;//count++表示第一个数后面连号的次数,最后要加上第一个数
	 cout<<b<<endl;//输出
 }

P1089 [NOIP 2004 提高组] 津津的储蓄计划

题目描述

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20%20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100100 元或恰好 100100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如 1111月初津津手中还有 8383 元,妈妈给了津津 300300 元。津津预计1111月的花销是 180180 元,那么她就会在妈妈那里存 200200 元,自己留下 183183 元。到了 1111 月月末,津津手中会剩下 33 元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据 20042004 年 11 月到 1212 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 20042004 年年末,妈妈将津津平常存的钱加上 20%20% 还给津津之后,津津手中会有多少钱。

代码

 #include<iostream>
 using namespace std;
 int main()
 {
 	int a[12]={0};
	for(int i=0;i<12;i++)
	{
		cin>>a[i];
	}
	int b=0;
	int sum=0;
	bool flag =true;
	for(int i=0;i<12;i++)
	{
		int c=3;//整百数量
		for(int j=1;j<=3;j++)//计算当月剩整百的数量及这个月总钱
		{
			if(sum<a[i])
			{
				sum+=100;
				c--;
			}
			else
			{
				break;
			}
		}
		sum=sum-a[i];//当月月余
		if(sum<0)//判断是否有月余
		{
			cout<<'-'<<i+1<<endl;
			flag=false;
			break;
		}
		else
		{
			b+=c;//整百数累加
		}
	}
	if(flag)//输出总钱
	{
		cout<<b*120+sum<<endl;
	}
	return 0;
 }

小总结

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

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

相关文章

MySQL三大日志——binlog、redoLog、undoLog详解

日志是mysql数据库的重要组成部分&#xff0c;记录着数据库运行期间各种状态信息&#xff0c;能帮助我们进行很多容错及分析工作&#xff0c;其中有三大日志与我们这些开发者息息相关&#xff0c;本文将介绍binlog、redoLog、undoLog三种日志&#xff1a; 1. redoLog 1.1 为什么…

SpringAI系列 - 使用LangGPT编写高质量的Prompt

目录 一、LangGPT —— 人人都可编写高质量 Prompt二、快速上手2.1 诗人 三、Role 模板3.1 Role 模板3.2 Role 模板使用步骤3.3 更多例子 四、高级用法4.1 变量4.2 命令4.3 Reminder4.4 条件语句4.5 Json or Yaml 方便程序开发 一、LangGPT —— 人人都可编写高质量 Prompt La…

springboot+vue导入ruoyi项目的框架

一、介绍 RuoYi-Vue版本&#xff0c;采用了前后端分离的单体架构设计软件环境&#xff1a;JDK、Mysql、Redis、Maven、Node技术选型: Spring Boot、Spring Security、MyBatis、Jwt、Vue3、Element-Plus官方地址: https://gitee.com/y_project/RuoYi-Vue 官方推荐的版本如下&a…

Conmi的正确答案——Rider中添加icon作为exe的图标

C#版本&#xff1a;.net 8.0 Rider版本&#xff1a;#RD-243.22562.250&#xff08;非商业使用版&#xff09; 1、添加图标到解决方案下&#xff1a; 2、打开“App.xaml”配置文件&#xff0c;添加配置&#xff1a; <Applicationx:Class"ComTransmit.App"xmlns&q…

360手机刷机 360手机解Bootloader 360手机ROOT

360手机刷机 360手机解Bootloader 360手机ROOT 问&#xff1a;360手机已停产&#xff0c;现在和以后&#xff0c;能刷机吗&#xff1f; 答&#xff1a;360手机&#xff0c;是肯定能刷机的 360手机资源下载网站 360手机-360手机刷机RootTwrp 360os.top 360rom.github.io 一、…

实验3 词法分析(二)

实验3 词法分析(二) [实验目的]&#xff1a; 1 . 熟悉给定的词法分析程序&#xff1b; 2 . 改进词法分析程序。 [实验内容]&#xff1a; 1.尝试多方面改进TEST语言的文法&#xff0c;参考教材附录B词法分析程序TESTscan.c&#xff0c;在此词法分析程序的基础上改进程序&#x…

VsCode创建VUE项目

1. 首先安装Node.js和npm 通过网盘分享的文件&#xff1a;vsCode和Node&#xff08;本人电脑Win11安装&#xff09; 链接: https://pan.baidu.com/s/151gBWTFZh9qIDS9XWMJVUA 提取码: 1234 它们是运行和构建Vue.js应用程序所必需的。 1.1 Node安装&#xff0c;点击下一步即可 …

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具04

SQLSERVER的ImpDp和ExpDp工具演示 1、指定某些表作为导出对象外 (-exclude_table) 验证用&#xff1a;导出的表&#xff0c;导入到新的数据库 2、指定某些表作为导出对象外 (-exclude_table) 支持模糊检索&#xff0c;可以使用星号 以s开头的表作为导出对象外&#xff0c;…

国内知名Deepseek培训师培训讲师唐兴通老师讲授AI人工智能大模型实践应用

课程名称 《Deepseek人工智能大模型实践应用》 课程目标 全面了解Deepseek人工智能大模型的技术原理、功能特点及应用场景。 熟练掌握Deepseek大模型的提示词工程技巧&#xff0c;能够编写高质量的提示词。 掌握Deepseek大模型在办公、营销等领域的应用方法&#xff0c;提升…

【C语言标准库函数】指数与对数函数:exp(), log(), log10()

目录 一、头文件 二、函数简介 2.1. exp(double x) 2.2. log(double x) 2.3. log10(double x) 三、函数实现&#xff08;概念性&#xff09; 3.1. exp(double x) 的模拟实现 3.2. log(double x) 和 log10(double x) 的模拟实现 四、注意事项 4.1. exp(double x) 的注…

小白系列:数据库基础知识解析

前言 今天&#xff0c;我打算用简单明了的语言来讲解一下数据库的基本概念。总体上&#xff0c;这些内容与我在视频中讲解的基本一致。如果你发现视频的讲解有些难以理解&#xff0c;不妨看看这篇文字版的解释&#xff0c;希望能够更快速地帮助你掌握数据库的相关知识。需要注…

【AIGC魔童】DeepSeek核心创新技术(二):MLA

【AIGC魔童】DeepSeek核心创新技术&#xff08;二&#xff09;&#xff1a;MLA 1. MLA框架的定义与背景2. MLA框架的技术原理&#xff08;1&#xff09;低秩联合压缩&#xff08;2&#xff09;查询的低秩压缩&#xff08;3&#xff09;旋转位置嵌入&#xff08;RoPE&#xff09…

安卓/ios脚本开发按键精灵经验小分享

1. 程序的切换 我们经常碰到这样的需求&#xff1a;打开最近的应用列表&#xff0c;选取我们想要的程序。但是每个手机为了自己的风格&#xff0c;样式都有区别&#xff0c;甚至连列表的滑动方向都不一样&#xff0c;我们很难通过模拟操作来识别点击&#xff0c;那么我们做的只…

完全离线部署deepseek并建立本地知识库应用电子数据取证领域

点击上方蓝字“小谢取证”一起玩耍 之前小谢推出一篇部署本地大模型教程&#xff0c;但需要网络环境 AI机器人本地免费部署&#xff08;部署Llama 3.1详细教程&#xff09; 还是比较受到读者的欢迎&#xff0c;但应读者要求&#xff1a;需要这个模型能够训练&#xff0c;能够…

ctf网络安全题库 ctf网络安全大赛答案

此题解仅为部分题解&#xff0c;包括&#xff1a; 【RE】&#xff1a;①Reverse_Checkin ②SimplePE ③EzGame 【Web】①f12 ②ezrunner 【Crypto】①MD5 ②password ③看我回旋踢 ④摩丝 【Misc】①爆爆爆爆 ②凯撒大帝的三个秘密 ③你才是职业选手 一、 Re ① Reverse Chec…

SolidWorks教程P2.2【草图 | 第二节】——草图几何关系与编辑

草图几何关系包括&#xff1a;重合、中点、相切、平行、相等、共线、对称 草图编辑功能包括&#xff1a;裁剪实体、转换实体引用、等距实体 目录 1.草图几何关系 2.裁剪实体 3.转换实体引用 4.等距实体 补充知识&#xff1a;智能尺寸 1.草图几何关系 在之前的草图介绍里…

数据库系统概念第六版记录 三

外码约束&#xff08;Foreign Key Constraint&#xff09; 外码&#xff08;Foreign Key, FK&#xff09;是关系数据库中的一个约束&#xff0c;它用于保证表之间的引用完整性。外码的值必须&#xff1a; 要么存在于被引用表的主键列中&#xff0c;要么为空&#xff08;NULL&…

MySQL视图索引操作

创建学生表&#xff1b; mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-> Ssex char(2) check (Ssex男 or Ssex女) not null,-> Sage int not null,-> Sdept varchar(10) default 计算机 not …

HIVE如何注册UDF函数

如果注册UDF函数的时候报了上面的错误&#xff0c;说明hdfs上传的路径不正确&#xff0c; 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径&#xff0c;这样在创建函数时&#xff0c;引用下面的地址就可以创建成功

硬件电路基础

目录 1. 电学基础 1.1 原子 1.2 电压 1.3 电流 1.电流方向&#xff1a; 正极->负极,正电荷定向移动方向为电流方向&#xff0c;与电子定向移动方向相反。 2.电荷&#xff08;这里表示负电荷&#xff09;运动方向&#xff1a; 与电流方向相反 1.4 测电压的时候 2. 地线…