C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数

2023-10-30

方法一:挨个遍历 从1-1000都试一次 -----通俗易懂的方法

#include<stdio.h>
#include<time.h>
bool IsPrime(int n) 
{
    int i;
    if (n <= 1) 
    {
        return false;
    }
    if (n == 2) 
    {
        return true;
    }
    for (i = 2; i < n; i++) 
    {
        if (n % i == 0) return false;
    }
    return true;
}
int main() 
    {
    int n, i;
    int t1 = clock();
    for (i = 0; i <= 1000; i++) 
    {
        if (IsPrime(i)) printf(" %d ", i);
    }
    int t2 = clock();
    printf("\n运行时间:%d\n", t2 - t1);
    return 0;
}

代码运行结果如下:

 

方法二:使用奇数的思想

核心思想:除了2以外那些2的倍数(4、6、8、10、12、14、18·······)都不是质数

代码示例如下:

#include <stdio.h>
int main()
{
    int x = 0;
    int i = 0;
    unsigned int count = 0;
    x = 2;
    printf("%d ", x);   
    for (x = 3; x < 1000; x += 2)  
    {
        for (i = 2; i < x; i++)
        {
            count++;
            if (x % i == 0)
            {
                break;
            }
        }
        if (x == i)
        {
            printf("%d ", x);
        }
    }
    printf("\n\n\n");
    printf("运算的次数:%d ", count);
    return 0;
}

运行结果如下:

 

方法三:同时使用奇数和偶数来实现

核心思想:所以除了2以外质数一定是奇数

代码示例如下:

#include <stdio.h>
int main()
{
    int x = 0;
    int i = 0;
    unsigned int count = 0;
    x = 2;
    printf("%d ", x);
    for (x = 3; x < 1000; x += 2)  //两层for循环均只产生奇数
    {
        for (i = 3; i < x; i += 2)  //控制第二层for循环不再自增1,而是从3开始自增2
        {
            count++;
            if (x % i == 0)
            {
                break;
            }
        }
        if (x == i)
        {
            printf("%d ", x);
        }
    }
    printf("\n\n\n");
    printf("运算的次数:%d ", count);
    return 0;
}

代码运行结果如下:

 

方法四:平方根sqrt方法实现

代码示例如下:

#include<stdio.h>
#include<time.h>
#include<math.h>
int IsPrime(int n) 
{
    int i;
    if (n % 2 == 0) return 0;
    for (i = 3; i <= sqrt(n); i += 2) 
    {
        if (n % i == 0) return 0;
    }
    return 1;
}
int main() {
    int n, i;
    int t1 = clock();
    printf(" 2 ");
    for (i = 3; i <= 1000; i++) 
    {
        if (IsPrime(i)) printf(" %d ", i);
    }
    int t2 = clock();
    printf("\n运行时间:%d\n", t2 - t1);
}

代码运行结果如下:

 

方法五:使用数组的方法实现

代码示例如下:

#include <stdio.h>
int main()
{
    int arr[500] = { 0 };
    int x = 0;
    int i = 0;
    unsigned int count = 0;
    int sum = 0;  //定义数组的下标
    arr[sum] = 2;  //把2存到数组中
    sum++;
    arr[sum] = 3;   //把3存到数组中
    sum++;
    for (x = 5; x < 1000; x += 2)
    {
        for (i = 0; i < sum; i++)//从下标0开始遍历,直到数组的最后一个质数
        {
            count++;
            if (x % arr[i] == 0)
            {
                break;
            }
        }
        if (sum == i)  //遍历后都不能整除
        {
            arr[sum] = x;  //把质数保存到数组中
            sum++;   //下标加1,为下次放做准备
        }
    }
    for (i = 0; i < sum; i++)//使用for循环进行输出
    {
        printf("%d ", arr[i]);
    }
    printf("\n\n\n");
    printf("运算的次数:%d ", count);
    return 0;
}

代码运行结果如下:

 

方法六:筛选法(空间换时间)

思路:把2到n中的所有数都列出来,然后从2开始,先筛去n内所有2的倍数,然后每次从下一个剩下的数(必然为质数)开始,筛去其n内所有的倍数,最后剩下的数都是质数

代码示例如下:


//1.设置一个数组a[],a[i]的值为1表示i为质数,将所有元素初始化为1

//2.筛去m的倍数,即把a[2*m]、a[3*m]…置为0

//3.输出a[i]值为1的i。
#include<stdio.h>
#define MAX 1000
int s;
int a[MAX];
void prime()
{
    s = 1;
    for (int i = 0; i <= MAX; i++)
        a[i] = 1;
    a[0] = a[1] = 0;
    for (int i = 2; i <= MAX; i++)
    {
        if (a[i])
            a[s++] = i;
        for (int j = i * 2; j <= MAX; j += i)
            a[j] = 0;
    }
}
int main()
{
    prime();
    for (int i = 1; i < s; i++)
        printf("%d ", a[i]);
    return 0;
}

代码运行结果如下:

 

编者注:以上对本小题的代码编写的多种方法,欢迎大家收藏借鉴并转发;

               以上代码仅供参考,如有问题欢迎大家在留言区批评指正;

               版权所有,翻印必究,如有雷同纯属巧合,转载请注明出处。

               By CRH380AJ2808 2022.04.27


————————————————
版权声明:本文为CSDN博主「CRH380AJ2808」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JH13thpig/article/details/124440215

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数 的相关文章

  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • STM32基础(7)定时器中断

    原理 STM32F1 的定时器非常多 由 2 个基本定时器 TIM6 TIM7 4 个通用定时器 TIM2 TIM5 和 2 个高级定时器 TIM1 TIM8 组成 基本定时器的功能最为简单 类似于 51 单片机内定时器 通用定时器是在基本
  • Unity RenderTexture实现 刮彩票、橡皮擦、擦除效果(3D物体)

    一 实现效果 类似刮刮乐的擦除效果 支持多笔擦除 一次擦不干净 二 所用技术点 RenderTexture Shader 三 实现原理 一个相机单独渲染笔刷轨迹到RenderTexture上 在通过RenderTexture中的笔刷路径修改
  • Ubuntu chrome 浏览器鼠标飘

    问题 ubuntu 系统 4k分辨率下 Chrome 或类似浏览器在全屏模式下 鼠标发飘或卡顿 原因 驱动问题 显卡未得到完全驱动 sudo ubuntu drivers devices sudo ubuntu drivers autoin
  • node升级的正确方法

    注 抱歉之前没有注明该node升级方法为linux环境下的node 现在增加windows下的升级方法 其实对于一些开源的库或者框架个人还是比较建议直接去相应的官网查看会比较好 而且很多都支持中文版 贴上node官网 本文主要是针对安装了n
  • 怎样查看Linux服务器配置

    1 前言 本文主要讲解如何查看Linux服务器配置 主要是查看服务器硬件配置 怎样查看Linux服务器配置 2 查看CPU信息 2 1 使用 lscpu 命令查看服务器CPU信息 lscpu 如下图 使用lscpu命令查看服务器CPU信息
  • 硬中断和软中断

    本文主要内容 硬中断 软中断的原理和实现 内核版本 2 6 37 Author zhangskd csdn blog 概述 从本质上来讲 中断是一种电信号 当设备有某种事件发生时 它就会产生中断 通过总线把电信号发送给中断控制器 如果中断的
  • JVM复习总结

    1 JVM运行时内存划分区域 方法区 线程公有 堆 线程公有 虚拟机栈 线程私有 本地方法栈 线程私有 程序计数器 线程私有 2 类加载器分类 启动类加载器 拓展类加载器 应用程序加载器 用户自定义加载器 3 类加载的步骤 加载 链接 验证
  • 嵌入式固件升级设计

    文章目录 IAP DFU和OTA的区别 DFU模式 DFU单区和双区 双区DFU设计 IAP DFU和OTA的区别 IAP In Application Programming IAP是用户自己的程序在运行过程中对User Flash的部分
  • pymongo保存dataframe格式的数据(insert_one, insert_many, 多线程保存)

    使用Pymongo保存数据的基本方法 增删改查 请参考 Python连接MongoDB 使用pymongo进行增删改查 文章目录 1 基本方法 逐行保存 2 insert many 批量保存 3 Threading 多线程保存数据 1 基本
  • [从零开始学DeepFaceLab-17]: 使用-命令行八大操作步骤-第7步:模型预测与生成合成图片 - 进阶 - 通过图形界面调参微调、精细合成图片

    目录 前言 第1章 如何进入可视化微调界面 第2章 窗口操作详解 2 1 操作图片选择
  • 软件测试职业规划

    软件测试职业规划 以下是转载内容 软件测试人员的发展误区 4 公司开发的产品专业性较强 软件测试人员需要有很强的专业知识 现在软件测试人员发展出现了一种测试管理者不愿意看到的景象 1 开发技术较强的软件测试人员转向了软件开发 非测试工具开发
  • spring boot 跨域问题(sessionid不一致 已解决)

    现象 Spring boot验证码接口与登录接口的sessionid不一致 解决方法 WebConfig中添加如下代码 Override public void addCorsMappings CorsRegistry registry r
  • 用ESP32玩转真彩屏

    很多人都说ESP32的出现是物联网开发者的福音 就是专为物联网应用而设计的 没错 我们都这样认为 ESP32不仅具有业内高水平的低功耗性能 而且它的高度集成特性 将天线开关 RF balun 功率放大器 接收低噪声放大器 滤波器 电源管理模
  • 微信开发相关:使用微信 JS-SDK 接口

    微信开发相关 使用微信 JS SDK 接口 准备工作 接口使用流程 公众号设置 前端向后端请求 ticket 后端向微信获取 token 后端根据 token 生成 ticket 根据 ticket 创建签名 前端创建配置信息 并注入验证
  • flutter Vertical viewport was given unbounded height

    问题描述 在Flutter开发中遇到 Vertical viewport was given unbounded height 问题出现的情况 这个问题主要是ListView builder出现的问题 如果是简单用的话 会出现这个问题的话
  • gcc/g++编译器的使用

    1 gcc编译器简介 gcc原名是GNU C Complier 支持C语言的编译链接 也支持C object c等语言的编译链接 根据 深入理解计算机系统 第三版 第1 2小节内容 gcc将一个源程序文件转换为最终的可执行程序需要经过预处理
  • IDEA 配置Maven国内源

    首先打开设置 在设置中搜索maven 然后跳转到这个页面 看到有一个User settings files这个项 Users xq m2 settings xml这个便是配置文件 修改这个文件即可 如果没有这个文件 可以新建一个settin
  • C++类模板的使用

    一 基本使用 通用类型用于成员变量 通用类型用于成员函数的参数 通用类型用于成员函数的返回值 获取成员变量 通用类型用于成员函数的代码中 代码 include
  • 【计算机视觉

    文章目录 一 检测相关 6篇 1 1 ALWOD Active Learning for Weakly Supervised Object Detection 1 2 mEBAL2 Database and Benchmark Image
  • C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数

    方法一 挨个遍历 从1 1000都试一次 通俗易懂的方法 include