输出100-200之间的素数

简介: 输出100-200之间的素数


素数

    素数(质数):只能被1和它本身整除的数。 注:1不是素数

🔑 如果是素数就要不断的去试除来证明,直到全部排除🔑

#include<stdio.h>
int main()
{
  int i = 0;
  int j = 0;
  for(i = 100; i <= 200; i++)
  {
    //判断i是否为素数
    //试除区间:2->i-1 
    for(j = 2; j < i; j++)//这里就排除了1和素数本身   
    {
      if (i % j == 0)
        break;
      if (i % j != 0 && j == i - 1)
        printf("%d ", i);
    }
  }
  return 0;
}

🔑 优化:相反不是素数则有一个数满足条件 (能被除了1和它本身的数整除) ,它就不是素数 🔑

#include<stdio.h>
int main()
{
  int i = 0;
  int j = 0;
  for(i = 100; i <= 200; i++)
  {
    for(j = 2; j < i; j++)
    {
        //非素数,直接break
      if (i % j == 0)
        break;
    }
    //这里说明i已经将所有的数试除了,所以这个数是素数
    if (i == j)
      printf("%d ", i);
  }
  return 0;
}

🔑 使用 flag 标志。这是另一种方法 - 每道题都可能有不同的解决方法,多思考从各个角度解决问题 🔑

#include<stdio.h>
int main()
{
  int i = 0;
  int j = 0;
  for(i = 100; i <= 200; i++)
  {
    int flag = 1;//给1个标记
    for(j = 2; j < i; j++)
    {
      if (i % j == 0)
      {
        flag = 0;//如果是素数则将标记赋值为0
        break;
      }
    }
    if (1 == flag)//1是素数,0不是素数
      printf("%d ", i);
  }
  return 0;
}

🔑

  优化思路:减少试除的次数

   m = a * b

   a 和 b中至少有一个数字是 <= 开平方 m 的;如果在开平方 m 之前找到 1 个因子能够整除 m 的话,那就可以不用找另 1 个因子了

   16 = 2 * 8 = 4 * 4

   也就是说如果能找到 2 能够整除 16 的话,就没必要去找 8 能不能整除 16 了

   在之前是使用i去试除 2 -> i - 1 之间的数;现在是试除 2 -> sqrt(i) 之间的数

🔑

#include<stdio.h>
#include<math.h>
int main()
{
  int i = 0;
  int j = 0;
  for (i = 100; i <= 200; i++)
  {
    int flag = 1;
    for (j = 2; j <= sqrt(i); j++)//sqrt是开平方函数,所在头math
    {
      if (i % j == 0)
      {
        flag = 0;
        break;
      }
    }
    if (1 == flag)
      printf("%d ", i);
  }
  return 0;
}

🔑 再优化:偶数有可能是素数吗? - 当然是不可能的 🔑

#include<stdio.h>
#include<math.h>
int main()
{
  int i = 0;
  int j = 0;
  for (i = 101; i <= 200; i+=2)//101、103、105、107...(从源头上跳过偶数)
  {
    int flag = 1;
    for (j = 2; j <= sqrt(i); j++)//sqrt是开平方函数,所在头math
    {
      if (i % j == 0)
      {
        flag = 0;
        break;
      }
    }
    if (1 == flag)
      printf("%d ", i);
  }
  return 0;
}

🔑 再优化 。。。 。。。额,学废了学废了。。。。当然大家如果还有别的方法 ,希望能分享出来一起学习 🔑

//欢迎大佬补充
//欢迎大佬补充

输出结果



相关文章
|
15天前
|
安全 定位技术 数据安全/隐私保护
数据被拍泄露,事后溯源还有意义吗? 屏幕隐形水印为您精准锁定泄露源!
数据泄露后溯源并非无用,而是阻断扩散、震慑违规、完善防护的关键。屏幕隐形水印可无感嵌入用户信息,实现精准追责,助力构建“事前防控、事中可控、事后可溯”的全周期安全体系。
|
数据可视化 Python
Plotly:绘制蜡烛图
Plotly:绘制蜡烛图
259 0
|
10月前
|
监控 Kubernetes Java
阿里面试:5000qps访问一个500ms的接口,如何设计线程池的核心线程数、最大线程数? 需要多少台机器?
本文由40岁老架构师尼恩撰写,针对一线互联网企业的高频面试题“如何确定系统的最佳线程数”进行系统化梳理。文章详细介绍了线程池设计的三个核心步骤:理论预估、压测验证和监控调整,并结合实际案例(5000qps、500ms响应时间、4核8G机器)给出具体参数设置建议。此外,还提供了《尼恩Java面试宝典PDF》等资源,帮助读者提升技术能力,顺利通过大厂面试。关注【技术自由圈】公众号,回复“领电子书”获取更多学习资料。
|
机器学习/深度学习 人工智能 安全
探索移动应用开发的未来:技术趋势与系统演进
【8月更文挑战第9天】 本文将深入探讨移动应用开发的最新趋势,以及移动操作系统如何适应这些变化。我们将从跨平台框架的崛起、人工智能与机器学习在移动应用中的集成,到移动操作系统的安全创新进行详细分析。文章旨在为开发者和技术人员提供行业洞察,帮助他们把握未来移动应用开发的脉络。
155 6
|
机器学习/深度学习 数据采集 存储
【强化学习】常用算法之一 “A3C”
A3C(Asynchronous Advantage Actor-Critic)算法是一种在强化学习领域中应用广泛的算法,它结合了策略梯度方法和价值函数的学习,用于近似解决马尔可夫决策过程(Markov Decision Process)问题。A3C算法在近年来备受关注,因为它在处理大规模连续动作空间和高维状态空间方面具有出色的性能。A3C算法是一种基于策略梯度的强化学习算法,通过多个并行的智能体异步地与环境交互,并利用Actor和Critic网络实现策略和价值的近似,从而实现快速而稳定的强化学习训练。
2416 0
【强化学习】常用算法之一 “A3C”
|
Linux
【Linux命令200例】less强大的文件内容查看工具
Linux less 命令是一个功能强大的终端分页器,用于查看文件内容。它可以显示大型文本文件,并允许用户在文件中上下翻页、搜索和跳转等操作。相比于使用 cat 命令直接输出文件内容,less 提供了更好的交互体验和更多的功能选项。
588 0
|
网络协议 算法 数据建模
距离矢量路由协议
文章目录 前言✨✨✨ Route base💺 什么是路由:⛵ 什么是路由表:🚏 路由表的基本元素:🏎️ 管理距离:🛻 路由分两类:🚆 配置静态路由:🛰️ 默认路由:🚨 什么是路由协议:🚂 从工作原理分为:⛺ 配置浮动静态路由:🚦 距离矢量路由协议🗺️ 🌌总结🌌
454 0
距离矢量路由协议
|
运维 监控 算法
第一代软件开发(三)
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
分布式计算 Cloud Native 数据管理
开源软件在政府和公共部门的应用
开源软件在政府和公共部门的应用
301 0
|
存储 NoSQL JavaScript
最强分布式锁工具:Redisson(一)
最强分布式锁工具:Redisson
最强分布式锁工具:Redisson(一)