打印素数的四种方法

简介: 打印素数的四种方法

素数的定义:

素数:即质数,除了1和它本身外,没有其他的约数。

代码实现:

方法一:试除法:判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数。

int main()
{
  int i = 0;
  int count = 0;
  // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
  for (i = 101; i <= 200; i++)
  {
    //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
    int j = 0;
    for (j = 2; j < i; j++)
    {
      if (i % j == 0)
      {
        break;
      }
    }
    // 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
    if (j == i)
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount = %d\n", count);
  return 0;
}

方法二:将方法一进行优化,每拿到一个数据,只需要拿[2, i/2]区间内的数据即可,因为另一半数据可以通过前一半数据乘2获得。

int main()
{
  int i = 0;//
  int count = 0;
  for (i = 101; i <= 200; i++)
  {
    //判断i是否为素数
    //2->i-1
    int j = 0;
    for (j = 2; j <= i / 2; j++)
    {
      if (i % j == 0)
      {
        break;
      }
    }
    //...
    if (j > i / 2)
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount = %d\n", count);
  return 0;
}

方法三:再进行一次优化,如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数

原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)。

int main()
{
  int i = 0;
  int count = 0;
  for (i = 101; i <= 200; i++)
  {
    //判断i是否为素数
    //2->i-1
    int j = 0;
    for (j = 2; j <= sqrt(i); j++)
    {
      if (i % j == 0)
      {
        break;
      }
    }
    //...
    if (j > sqrt(i))
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount = %d\n", count);
  return 0;
}

方法四:实际上在操作时i不用从101逐渐递增到200,因为出了2和3之外,不会有两个连续相邻的数据同时为素数。

int main()
{
  int i = 0;
  int count = 0;
  for (i = 101; i <= 200; i += 2)
  {
    //判断i是否为素数
    //2->i-1
    int j = 0;
    for (j = 2; j <= sqrt(i); j++)
    {
      if (i % j == 0)
      {
        break;
      }
    }
    //...
    if (j > sqrt(i))
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount = %d\n", count);
  return 0;
}


相关文章
|
设计模式 算法 安全
【设计模式】RBAC 模型详解
随着软件系统的复杂性和规模的不断增长,权限管理成为了一个至关重要的问题。在大型多人协作的系统中,如何有效地管理不同用户的访问权限,确保系统的安全性和稳定性,是每一个开发者都需要面对的挑战。为了解决这一问题,业界提出了一种被广泛应用的权限管理模型——基于角色的访问控制(Role-Based Access Control,简称RBAC)。希望通过本篇博客的学习,您能够深入了解RBAC模型的核心思想和实现原理,掌握如何在实际项目中应用RBAC模型来提高系统的安全性和可维护性。
2085 1
常见的BUG---1、虚拟机启动之后,突然发现没有ens33网卡
常见的BUG---1、虚拟机启动之后,突然发现没有ens33网卡
|
8月前
|
SQL 人工智能 数据可视化
16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"
ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图。无需安装客户端、不用暴露数据库密码,打开网页就能完成从数据建模到迁移的全流程操作,堪称开发者的"数据库透视镜"。
1873 67
|
缓存 NoSQL Java
RedisTemplate操作Redis,这一篇文章就够了
redis是一款开源的Key-Value数据库,运行在内存中,由C语言编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 等。
3201 1
|
Java 微服务
解决:Parameter 0 of method ribbonServerList in com.alibaba.cloud.nacos.ribbon.NacosRibbonClientConfigu
解决:Parameter 0 of method ribbonServerList in com.alibaba.cloud.nacos.ribbon.NacosRibbonClientConfigu
1120 0
|
Java 测试技术 Spring
SpringBoot配置加载顺序
SpringBoot配置加载顺序
1294 0
|
负载均衡 网络协议 前端开发
一文快速上手 Nacos 注册中心+配置中心!
一文快速上手 Nacos 注册中心+配置中心!
9069 0
|
编译器 C语言 C++
VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程
VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程
11241 0
|
Java 测试技术 Spring
|
存储 安全 Java
日期时间之争:Date与LocalDateTime的决胜局
日期时间之争:Date与LocalDateTime的决胜局
4379 0

热门文章

最新文章