第十四弹--打印1-100之间的素数

简介: 第十四弹--打印1-100之间的素数

实现C语言打印1-100之间的素数

定义:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

方法一 试除法

依次遍历 挑选出符合条件的数字打印

1.创建一个嵌套循环,实现遍历

int i = 0, j = 0;
for (i = 2; i <= 100; i++)
{
  for (j = 2; j <= i; j++)
  {
  }
}

2.设定条件

if (i % j == 0)//如果被数整除就结束本次循环
{
  break;
}
if (i == j)//结束内层循环后 判断i 是否相等 相等证明是素数
{
  printf("%d ",i);
}

完整代码实现

#include <stdio.h>
int main()
{
  int i = 0, j = 0;
  for (i = 2; i <= 100; i++)
  {
    for (j = 2; j <= i; j++)
    {
      if (i % j == 0)
      {
        break;
      }
    }
    if (i == j)
    {
      printf("%d ",i);
    }
  }
  return 0;
}

去偶数法

已知在1-100之内偶数永远不可能是素数 所以每次i可以跳过偶数

1.如上创建嵌套循环 不过此处进行一个小优化 把判断条件使用一个flag数进行判断

int i = 0,j = 0;
printf("2 ");
for (i = 3; i <= 100; i += 2)
{
  int flag = 1;//注意 需要把flag放在外层循环内 因为如果非素数的话会导致flag为0 需要每次进行重置
  for (j = 2; j < i; j++)
  {
  }
}

2.符合条件进行打印 需要注意的是直接去除偶数的话 会缺少了一个2 需要补上

if (i % j == 0)
{
  flag = 0;//在内层循环中 j要小于i 不能等于 否则i%j==0 flag恒为0
  break;
}
if (flag == 1)
{
  printf("%d ",i);
}

完整代码实现

#include <stdio.h>
int main()
{
  int i = 0,j = 0;
  printf("2 ");
  for (i = 3; i <= 100; i += 2)
  {
    int flag = 1;
    for (j = 2; j < i; j++)
    {
      if (i % j == 0)
      {
        flag = 0;
        break;
      }
    }
    if (flag == 1)
    {
      printf("%d ",i);
    }
  }
  return 0;
}

sqrt()函数法

在sqrt开方下会产生两个数 一个数如果为非素数的话 那么它肯定依然可以取模。这样子循环只要一半 提高了效率。

#include <stdio.h>
#include <math.h>
int main()
{
  int flag = 0;
  for (int i = 2; i <= 100; i++)
  {
    flag = 1;
    for (int j = 2; j <= sqrt(i); j++)
    {
      if (i % j == 0)
      {
        flag = 0;
        break;
      }
    }
    if (flag == 1)
    {
      printf("%d ",i);
    }
  }
  return 0;
}

注 在三种方法条件下 可以结合使用 提高效率,例如方法2+方法3 跳过偶数和开方 能减少更多的循环次数。

相关文章
|
Oracle Java 编译器
Java 中如何生成字节码?
Java 中如何生成字节码?
|
缓存 安全 Linux
Linux 设备驱动程序(一)((下)
Linux 设备驱动程序(一)
209 3
|
12月前
|
存储 供应链 搜索推荐
2024年CRM系统灵活性与可拓展性盘点
在数字化商业浪潮中,CRM系统成为企业提升客户关系管理和市场竞争力的关键工具。本文深入剖析纷享销客、Salesforce、Zoho、销售易和简道云五家CRM供应商的灵活性与可扩展性。纷享销客凭借先进的PaaS平台、丰富的接口对接、与主流OA深度集成及良好的市场口碑脱颖而出,适用于各规模企业的多样化应用场景,助力企业在激烈的市场竞争中赢得先机,实现可持续发展。
提升个人工作技能
提升个人工作技能
1185 6
|
C++
【PTA】L1-033 出生年(C++)
【PTA】L1-033 出生年(C++)
312 0
【PTA】L1-033 出生年(C++)
|
监控 安全 搜索推荐
智慧校园定位系统:数据驱动的校园管理决策与服务创新
智慧校园定位系统是构建智能化校园的重要工具,它提供实时定位、智能导航、安全预警等功能,极大地提升了校园的管理效率和师生的校园生活体验。通过集成先进的信息技术,为师生创造一个更加安全、便捷、高效的学习与工作环境。
487 5
智慧校园定位系统:数据驱动的校园管理决策与服务创新
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习:从理论到实践
【9月更文挑战第23天】深度学习,作为人工智能领域的一颗璀璨明珠,已经引领了无数科技的突破与创新。本文将深入浅出地介绍深度学习的核心概念、基础理论以及实战应用,帮助读者构建起对这一前沿技术的整体认识。我们将一起探索神经网络的奥秘,了解如何训练高效的模型,并且通过代码示例具体展示深度学习的强大能力。无论你是科技爱好者,还是志在从事AI研究的学者,这篇文章都将成为你深度学习之旅的启航点。
480 4
|
监控 安全
安全看得见,阿里云性能监控 ARMS 全真3D拓扑实现一“屏”了然
微服务架构下,各类服务之间存在着错综复杂的依赖关系。一旦业务出现问题,追查问题源头就好比大海捞针,没有头绪。但业务不等人,此时,在最短的时间内定位问题根源是开发和运维人员对微服务监控产品的核心诉求。 传统的监控产品提供了表格(table)、表单(form)和仪表盘(dashboard)三种展现形式,因其局限性,并无法完整和直观的提供监控详情,以快速定位问题。
4272 0
|
API 数据安全/隐私保护 开发者
​收不到验证码邮件该怎么办?
在日常生活中,收不到邮箱验证码会带来不便。解决方法包括:检查垃圾邮件文件夹并调整过滤设置;确认邮箱地址无误或使用备用邮箱;检查邮箱存储空间并设置自动清理;了解邮件服务提供商状态或尝试其他服务。使用AOKSend可确保验证码邮件顺利送达:注册账户,获取API密钥,配置SMTP设置,并利用分析工具优化邮件发送策略。遵循这些建议,能有效解决收不到验证码的问题。