【算法】数论(求质数)——蓝桥杯笔记、2.质数、7.质数、质数数目、纯质数、函数判断顺序的优化

news2024/12/25 23:52:19

文章目录

  • 蓝桥杯
    • 2.质数
    • 7.质数
    • 质数数目
    • 纯质数

蓝桥杯

2.质数

  求质数的几种方法:

#include<iostream>
#include<algorithm>
using namespace std;

bool is_primer1(int n)
{
    if (n < 2) return n;
    //for (int i = 2; i < n; i++)
    for (int i = 2; i <= n / i; i++)//对循环进行优化
    {
        if (n % i == 0) return false;
    }
    return true;
}
 
int primes[1000], cnt = 0;
bool st[1000];

void is_primer2(int n)
{
    for (int i = 2; i <= n; i++)
    {
        if (!st[i])
        {
            primes[cnt++] = i;
            cout << i << " ";
            for (int j = i + i; j <= n; j += i)
            {
                st[j] = true;
            }
        }
    }
}

int main()
{
    int n = 1000;
    //打印1000内的所有质数
    //1.试除法
    for (int i = 2; i <= n; i++)
    {
        if (is_primer1(i)) cout << i << " ";
    }
    cout << endl;

    //2.埃氏筛法
    is_primer2(n);
    return 0;
}

  
在这里插入图片描述
  
2.质数

  使用上面两种的任意一种求质数的方式就可以求出第2019个 质数是什么。

#include <iostream>
#include <cmath>
using namespace std;

int is_prime(int n)
{
  for(int i=2;i<=sqrt(n);i++)
  {
    if(n%i==0)
    return 0;
  }
  return 1;
}

int main()
{
  int count=1;
  for(int i=2;i<20000;i++)
  {
    if(count==2019&&is_prime(i))
    cout<<i;
    if(is_prime(i))
    {
      count++;
    }
  }
  return 0;
}

  

#include <iostream>
using namespace std;

const int N=100005;
int primes[N];
int cnt=0;
bool st[N];

int main()
{
  int n=100000;
  for(int i=2;i<=n;i++)
  {
    if(!st[i])
    {
      primes[cnt++]=i;
      for(int j=i+i;j<=n;j+=i)
      {
        st[j]=true;
      }
    }
  }
  cout<<primes[2018]<<endl;
  return 0;
}

  

7.质数

在这里插入图片描述

  因为数据量不是很大,所以我们直接从1到N对数进行判断或者,将所有1000前的质数提前计算好并且储存在primes中,输出到我们需要的1到N之间的质数集合也是可以的。这里注意题目中的不包含N,做好边界判断即可。

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

bool is_prime(int n)
{
    if(n<2) return 0;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0) return 0;
    }
    return 1;
}
int main()
{
    int cnt=0,n;
    cin>>n;
    for(int i=1;i<n;i++)
    {
        if(is_prime(i))
        {
            cnt++;
            cout<<i<<' ';
        }
    }
    
    if(n!=1) cout<<endl;
    cout<<cnt;
  return 0;
}

  

#include <iostream>
using namespace std;

typedef long long ll;
const int N = 10010;
ll primes[N], cnt = 0;
bool st[N];

int main()
{
    int n = 0, count = 0;
    cin >> n;
    for (int i = 2; i <= N; i++)
    {
        if (!st[i])
        {
            primes[cnt++] = i;
            for (int j = i + i; j <= N; j += i)
                st[j] = true;
        }
    }
    for (int i = 0; i < 10000; i++)
    {
        if (primes[i] < n && primes[i] != 0) 
        {
          cout << primes[i] << " ";
          count++;
        }
    }
    cout << endl;
    cout << count << endl;
    return 0;
}

  

质数数目

在这里插入图片描述
  直接累加从1到N的数中所有的质数个数。

#include <iostream>
#include<cmath>
using namespace std;
int prime(int n)
{
  if(n==0||n==1)
  return 0;
  for(int i=2;i<=sqrt(n);i++)
  {
    if(n%i==0)
    return 0;
  }
  return 1;
}
int main()
{
  int n;cin>>n;
  int count=0;
  for(int i=0;i<=n;i++)
  {
    if(prime(i))
    count++;
  }
  cout<<count;
  return 0;
}

  

纯质数

在这里插入图片描述
  在没有涉及到比较大的数时,我们其实直接使用sqrt优化遍历质数即可。在纯质数中我们在判断是否是质数的前提下,在对数进行一次判断是否个个数位上全是质数。两者的条件都符合进行累加,最后的结果就是我们所需要的。
  

函数判断顺序的优化

  这里有一个要注意的小点:

if (is_pure(i)&&is_prime(i))
if (is_prime(i)&&is_pure(i))

  上面的两行代码看上去作用似乎是完全一样的,确实没错,两者的代码含义都是一致的——即满足 is_pure(i) 又 满足 is_prime(i) 条件。但是两者的代码运行的时间效率相差很大,前一个函数的判断数位上是否全是质数,最多进行8次循环就可以返回结果;后一个函数的作用是判断质数时间复杂度接近O(n),相当于要把这个数从1到自身完全遍历一遍。两函数的计算效率相差极大。

  我们把效率高的函数 is_pure(i) 放在前面,编译器会先执行条件运算符中靠左的一方,如果不满足就直接跳过该数,不会对其进行判断质数的操作,效率大大提升。

  类似的还有对闰年二月的修改,判断二月的条件比较判断闰年的条件简单,放在左侧,若不满足是否为2月这个条件,也就没必要判断是否为闰年:

if(month==2&&is_leap_year(year)) month[2]=29; 

  

#include<cmath>
#include <iostream>
using namespace std;

int is_prime(int n)
{
    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0) return 0; 
    }
    return 1;
}

int is_pure(int n)
{
    while (n)
    {
        int t = n % 10;
        if (t == 0 || t == 1 || t == 4 || t == 6 || t == 8 || t == 9)
            return 0;
          n /= 10;
    }
    return 1;
}

int main()
{
    int count = 0;
    for (int i = 1; i <= 20210605; i++)
    { 
        if (is_pure(i)&&is_prime(i))
        {
            count++;
        }
    }
    cout << count << endl;
    return 0;
}

  

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

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

相关文章

简历信息泄露?如何用图数据库技术解决简历泄露事件的反欺诈挑战

“金三银四”&#xff0c;又到了春招黄金期&#xff0c;但个人简历泄露的数据安全问题诸见报端&#xff0c;甚至在此前的3.15晚会报道中就揭露过招聘平台上的简历信息被泄露&#xff0c;不法分子通过各种渠道获取到简历&#xff0c;并用于欺诈活动&#xff0c;形成了一套庞大的…

ZK vs FHE

1. 引言 近期ZAMA获得7300万美金的投资&#xff0c;使得FHE获得更多关注。FHE仍处于萌芽阶段&#xff0c;是未来隐私游戏规则的改变者。FHE需与ZK和MPC一起结合&#xff0c;以发挥最大效用。如&#xff1a; Threshold FHE&#xff1a;将FHE与MPC结合&#xff0c;实现信任最小…

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

c语言案例03-流程控制-if语句

c语言打卡-流程控制-if语句 一.在 C/C&#xff0c;if 函数或关键字具有判断功能&#xff0c;而判断这一操作必须基于给定条件&#xff0c;同样的&#xff0c;程序中使用 if 函数同样需要将判断条件作为参数传入&#xff0c;描述判断条件的代码语句简称为条件语句。如同现实生活…

【Python编程基础】第一节.Python基本语法(上)

文章目录 前言⼀、Python介绍二、Python环境配置三、Pycharm 书写代码四、Python基本语法 4.1 print 函数的简单使用 4.2 注释 4.3 Python 代码中三种波浪线和 PEP8 4.4 在 cmd 终端中运⾏ Python 代码 4.5 变量 4.6 数据类型 4.7 类型转换…

数码管的静态显示(二)

1.原理 要按照上图的顺序传递位选和段选的数据。 因为q0是最高位&#xff0c;共阳极数码管结构是dp....a&#xff0c;所以应该先传入低位a&#xff0c;而a在上图中的8段2进制编码中是seg[7]&#xff0c;所以段选信号的顺序是seg[0],...seg[7]。 因为输出信号是两个时钟&#x…

裁员潮下,打工人的自我修养

法律规定的 裁员补偿&#xff1a; 1、平等协商解除的&#xff0c;底线是N1&#xff0c;上限能谈多少法律都支持 2、有客观原因解除的&#xff0c;是N1 3、强制违法辞退的&#xff0c;是2N Tips&#xff1a;基数是每月的全额税前工资&#xff0c;包括奖金绩效等&#xff0c…

光伏电站信息化管理系统如何优化能源管理

随着可再生能源的快速发展&#xff0c;光伏电站作为其中的重要组成部分&#xff0c;其运营管理面临着越来越多的挑战。为了提升光伏电站的能源管理效率&#xff0c;信息化管理系统成为了不可或缺的工具&#xff0c;那么如何优化能源管理呢&#xff1f; 1.数据实时监控 信息化管…

GPU密集型计算性能优化的方法和技术

对GPU密集型计算进行性能优化的方法和技术多种多样。通过一些优化策略和技术需要综合考虑应用程序的具体需求、所使用的GPU硬件、以及编程模型和库的选择。通过不断地分析和调整&#xff0c;可以实现GPU计算性能的持续提升。以下是一些常用的优化策略和技术&#xff1a; 算法优…

论文阅读——EarthPT

EarthPT: a time series foundation model for Earth Observation 一个Earth Observation (EO)预训练的Transformer。EarthPT是一个7亿参数解码Transformer基础模型&#xff0c;以自回归自监督方式进行训练&#xff0c;并专门针对EO用例进行开发。我们证明了EarthPT是一个有效的…

尚硅谷vue全家桶(上)

vue2 简介第一天第二天 第三天第四天第五天 第六天第七天第八天 第九天 网课链接&#xff08;半个月拿下&#xff09; 简介 需要提前会的东西 中文文档链接点下面 vue.js 要会查文档用API 第一天 清除提示1 再文档中下载开发版本浏览器安装vue devtools插件 打开允许访问URL…

【网络编程基础(一)】网络基础和SOCKET

这里写目录标题 1、网络三要素2、IPV4和IPV6区别3、网络交互3.1、交互模型图3.2、基础通信协议3.3、OSI参考模型与TCP/IP参考模型对应关系 4、SOCKET网络套接字4.1、SOCKET分类4.2、基于流式套接字的编程流程4.3、网络通信雏形4.4、socket函数4.4.1、socket函数示例 4.5、bind函…

小红书图片怎么提取?小红书图片提取原图方法!

说到小红书&#xff0c;不少女性群体都知道这个&#xff0c;他的价值很高而且变现对于大多数做自媒体的小伙伴来说&#xff0c;也是不错的选择&#xff01; 小红书对于普通大众还是互联网创作者来说&#xff0c;都太实用了&#xff0c;唯一的缺点可能就是当我们需要存储他的图…

计算机设计大赛 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

基于springboot+vue实现药品信息管理系统项目【项目源码+论文说明】

基于springbootvue实现药品信息管理系统演示 摘要 本文介绍了一种基于SpringBoot的药品信息管理系统的设计与实现。该系统旨在提高药品管理的效率和准确性&#xff0c;包括药品信息的录入、修改、查询和删除、药品入库、出库等功能。该系统采用了SpringBoot框架、MySQL数据库、…

如何快速搭建物联网工业云平台

随着物联网技术的快速发展&#xff0c;物联网工业云平台已经成为推动工业领域数字化转型的重要引擎。合沃作为专业的物联网云服务提供商&#xff0c;致力于为企业提供高效、可靠的物联网工业云平台解决方案。本文将深入探讨物联网工业云平台的功能、解决行业痛点的能力以及如何…

用户数据的FLASH存储与应用(FPGA架构)

该系列为神经网络硬件加速器应用中涉及的模块接口部分&#xff0c;随手记录&#xff0c;以免时间久了遗忘。 一 背景 我们知道&#xff0c;在FPGA做神经网络应用加速时&#xff0c;涉及到权重参数的存储和加载。通常在推理过程中&#xff0c;会将权重参数存储在外部DDR或片上S…

WAAP全站防护是什么,有什么作用

WAAP全站防护是基于风险管理和WAAP理念打造的安全方案&#xff0c;以“体系化主动安全” 取代安全产品的简单叠加&#xff0c;为各类Web、API业务等防御来自网络层和应用层的攻击&#xff0c;帮助企业全面提升Web安全水位和安全运营效率。 主要的特性在于&#xff1a; 1.全周…

19双体系Java学习之数组的Arrays类

数组的Arrays类 ★小贴士 sort方法对数组进行排序&#xff0c;方法调用完成后&#xff0c;数组按升序排列。 binarySearch方法对数组进行二分查找&#xff0c;如果能找到需要查找的元素则返回该元素的下标&#xff0c;否则返回一个负数&#xff0c;详见binarySearch的范例代码。…

CSS:mix-blend-mode 颜色混合

一、属性 mix-blend-mode: normal; //正常 mix-blend-mode: multiply; //正片叠底 mix-blend-mode: screen; //滤色 mix-blend-mode: overlay; //叠加 mix-blend-mode: darken; //变暗 mix-blend-mode: lighten; //变亮 mi…