学C的第八天(完成猜字谜游戏复习之前的内容;了解goto转向语句;补充知识点;练习,学习试除法和辗转相除法)-2

简介: 3.写一个代码,打印100-200之间的素数:(新思路:试除法) (判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数)

image.png3.写一个代码,打印100-200之间的素数:(新思路:试除法

(判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数

// 打印100 - 200之间的素数
// 素数 - 质数
// 只能被1和它本身整除的数是质数
// 判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数
// 2到i-1 之间的数字 都不能整除i,则i是素数
#include <stdio.h>
int main()
{
  int i = 0;
  for ( i = 100; i <= 200; i++) //生成100 - 200之间的素数
  {
    // 判断i是否为素数
    // 循环产生 2到i-1
    int j = 0;
    int flag = 1; // flag=1 则 i是素数
    for ( j = 2; j <= i - 1; j++) // 这个循环产生的就是 2到i-1 的数
      //    2  到   i - 1 (用<=)
    {
      if (i % j == 0) // 用i模上一个j,看j能不能整除i,有余数则表示不能整除
      {
        flag = 0; // flag=0 则 i不是素数
        break; 
        // 有一个j把i整除了,说明i已经不是素数了,所以不用再循环了,break跳出循环
      }
    }
    if (flag == 1) // 到这里说明i是素数,把它打印出来
    {
      printf("%d  ", i);
    }
  }
  return 0;
}

image.png

(因为偶数除了2都不是素数,且题目范围中没有2,所以可以只生成100 - 200之间的奇数,可以排除一半的数字,效率提升一倍)

// 打印100 - 200之间的素数
// 素数 - 质数
// 只能被1和它本身整除的数是质数
// 判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数
// 2到i-1 之间的数字 都不能整除i,则i是素数
#include <stdio.h>
int main()
{
  int i = 0;
  for ( i = 101; i <= 200; i+=2) //生成100 - 200之间的素数
  {
    // 判断i是否为素数
    // 循环产生 2到i-1
    int j = 0;
    int flag = 1; // flag=1 则 i是素数
    for ( j = 2; j <= i - 1; j++) // 这个循环产生的就是 2到i-1 的数
      //    2  到   i - 1 (用<=)
    {
      if (i % j == 0) // 用i模上一个j,看j能不能整除i,有余数则表示不能整除
      {
        flag = 0; // flag=0 则 i不是素数
        break; 
        // 有一个j把i整除了,说明i已经不是素数了,所以不用再循环了,break跳出循环
      }
    }
    if (flag == 1) // 到这里说明i是素数,把它打印出来
    {
      printf("%d  ", i);
    }
  }
  return 0;
}


image.png

image.png

(一个数:k, 如果有 k = m * n, 那么一定有m或n小于根号k ,那么可以之前的 2到i-1 换成 sqrt(i),即根号i。进一步提高效率)

// 打印100 - 200之间的素数
// 素数 - 质数
// 只能被1和它本身整除的数是质数
// 判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数
// 2到i-1 之间的数字 都不能整除i,则i是素数
#include <stdio.h>
#include <math.h>
int main()
{
  int i = 0;
  for ( i = 101; i <= 200; i+=2) //生成100 - 200之间的素数
  {
    // 判断i是否为素数
    // 循环产生 2到i-1
    int j = 0;
    int flag = 1; // flag=1 则 i是素数
    for ( j = 2; j <= sqrt(i); j++) // 这个循环产生的就是 2到i-1 的数
      //    2  到   i - 1 (用<=) 
      //sqrt 是库函数,是开平方的意思 ,需要头文件<math.h>
      //sqrt(i)就是对i开平方
    {
      if (i % j == 0) // 用i模上一个j,看j能不能整除i,有余数则表示不能整除
      {
        flag = 0; // flag=0 则 i不是素数
        break; 
        // 有一个j把i整除了,说明i已经不是素数了,所以不用再循环了,break跳出循环
      }
    }
    if (flag == 1) // 到这里说明i是素数,把它打印出来
    {
      printf("%d  ", i);
    }
  }
  return 0;
}

image.png

4. 给定两个数,求这两个数的最大公约数:(新思路:辗转相除法)

思路:用两数中的较小值除以较大值,能整除则较小值就是最大公约数不能整除较小值自减1直到能整除,此时较小值就是最大公约数

//给定两个数,求这两个数的最大公约数: 
#include <stdio.h>
int main()
{
  int m = 0;
  int n = 0;
  scanf("%d %d", &m, &n); // 18 24
  //计算
  int k = (m > n ? n : m); // 找出较小值
  // 使用 条件操作符(三目操作符)条件成立把n赋给k,反之把m赋给k
  while (1)
  {
    if (m % k == 0 && n % k == 0) // 使两个数都能被较小值整除
    {
      break; // 都能被整除则停止
    }
    k--; // 不能整除则较小值自减,再次循环,直到两个数都能被较小值整除
  }
  printf("%d\n", k);
  return 0;
}


image.png

辗转相除法:)

//给定两个数,求这两个数的最大公约数: 
#include <stdio.h>
int main()
{
  int m = 0;
  int n = 0;
  scanf("%d %d", &m, &n); // 18 24
  //计算
  int k = 0;
  while (k = m % n) // 求余数,当余数为0后停止循环,此时,n为最大公约数
  {
    m = n; // 除数赋给被除数
    n = k; // 余数赋给除数
    // 赋值后再求余数,直到余数为0
  }
  printf("%d\n", n);
  return 0;
}

b4af687635154064a9076169d1022b82.png 

相关文章
|
SQL 存储 分布式计算
CDP的Hive3系列之Hive Metastore介绍
CDP的Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据。Impala、Spark、Hive 和其他服务共享元存储。与 HMS 的连接包括 HiveServer、Ranger 和代表 HDFS 的 NameNode。
2683 0
CDP的Hive3系列之Hive Metastore介绍
|
弹性计算 网络协议 Linux
最佳实践:阿里云VPC、ECS支持IPv6啦!
12月6日,阿里云宣布为企业提供全栈IPv6解决方案。 阿里云专有网络VPC、云服务器ECS,作为阿里云的核心产品,也于2018年11月底上线双栈VPC、双栈ECS,目前正在对外公测中。 那么如何在阿里云拥有IPv4/IPv6双栈VPC、双栈ECS呢,请看下文详解。
19469 0
|
存储 Prometheus 监控
Prometheus 的可视化与仪表盘
【8月更文第29天】Prometheus 是一个开源的监控系统和时间序列数据库,它能够高效地收集和存储各种指标数据。然而,原始的数据如果没有恰当的可视化工具来呈现,很难从中快速获得有用的信息。Grafana 是一款广泛使用的开源可视化工具,它与 Prometheus 结合得非常好,能够帮助我们创建交互式监控仪表盘。本文将介绍如何使用 Grafana 与 Prometheus 结合,构建美观且实用的监控仪表盘。
497 1
|
12月前
|
缓存 安全 前端开发
如何使用CMS模版来搭建网站?
内容管理系统(CMS)是用于创建和管理网站的专业工具。使用CMS模板可以提高网站的创建速度,同时还能提高网站的维护和管理。本文可给大家介绍一下如何使用CMS快速搭建一个网站?
194 5
|
存储 消息中间件 缓存
Lustre架构介绍的阅读笔记-NFS兼容性
Lustre是分布式NFS系统,融合了分布式系统和NFS特性。它支持线性扩展容量和性能,提供POSIX语义,隐藏复杂存储细节。关键技术涉及分布式计算、缓存、锁、事务、通信(RPC、消息队列、同步/异步模式)、选举、任务调度、健康检查、负载均衡、集群管理和QoS。数据一致性、复制(副本、EC)、热点管理及多种上层协议(如NFS、S3)也是重点。分布式存储通过扩容提升读写带宽和IOPS。
394 1
|
Docker 容器
docker: 修改运行容器的端口
docker: 修改运行容器的端口
|
消息中间件 Kubernetes 网络协议
亿级万物互联新时代的物联网消息中间件EMQX调研
EMQ 创始人兼 CEO 李枫表示:「EMQX 5.0 是 MQTT 领域的一个里程碑式的成果。它不仅是全球首个单集群支持 1 亿连接的分布式 MQTT 消息服务器,也是首个将 QUIC 引入 MQTT 的开创性产品。
535 68
亿级万物互联新时代的物联网消息中间件EMQX调研
|
SQL 分布式计算 Java
IDEA 打包 Spark 项目 POM 文件依赖
这是一个 Maven POM 示例,用于构建一个使用 Spark 与 Hive 的项目,目标是将数据从 Hive 导入 ClickHouse。POM 文件设置了 Scala 和 Spark 的依赖,包括 `spark-core_2.12`, `spark-sql_2.12`, 和 `spark-hive_2.12`。`maven-assembly-plugin` 插件用于打包,生成包含依赖的和不含依赖的两种 JAR 包。`scope` 说明了依赖的使用范围,如 `compile`(默认),`provided`,`runtime`,`test` 和 `system`。
324 0
|
SQL 运维 Cloud Native
西骏数据与阿里云携手合作,获得阿里云产品集成认证!
近日,北京西骏数据科技股份有限公司DataCaptain数据金盾安全管控软件与阿里云计算有限公司经过严格测试程序完成产品集成认证测试,这也意味着西骏数据与阿里云正式携手合作!
483 0