【C语言】统计素数并求和

2023-11-10

 改名字了,2022.2.26之前叫

回到正题,由题可知,题目要求在用户自己输入的定整数M和N区间内求出素数的个数,并且对他们求和。

要想解决编程题目,首先要知道题目问的是什么。 素数一般指质数质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

简而言之就是一个数字n只能被1和它本身整除(n>1,不包含1本身,即从2开始计数)。

知道了这些就可以往下进行了。

首先我们需要两个变量,用来存放输入的两个定整数,即:

#include<stdio.h>

int main()
{

int m,n;

scanf("%d%d",&m,&n);

}

(为了方便了解,下面只写main函数里面的代码。)

由此即可输入两个数字m,和n

其次我们应该可以想到有一个if判断条件,也就是什么时候这个数字可以判断成素数,然后进行求和的这样一个操作:

if()
{

cnt++;

sum+=i;

}

想到这这一句话,就要再创建三个变量i,cnt,sum;

i用来表示一直变化着的数字,也就是从m到n这个区间内遍历的数字,i是一直变化着的,cnt用来计数,记录从m到n这个区间内的素数个数,sum用来求和。

此时我们的代码可以写成这个样子:

 sum+=i 意思是sum=sum+i;

即将每次求出来的素数进行累计求和。

接下来我们可以从if入手,既然有了if,那我们就该考虑if()括号里面放入什么判断条件。

我们可以假设一个变量叫isPrime,当isPrime=1时,即为素数。

其次,我们要从m到n进行一个遍历,这样我们才能得到m到n的素数

这个循环的意思是:第一层for循环,先把m的值赋给i,当i<=n时进行下面的语句。这样做的意思是,让 i 这个变量从m到n遍历一遍,确保m到n区间内的整数都能被遍历过,不漏数字。

可以用数轴表示m到n

 随后是又重新定义了一个变量K 

把2赋值给k,当k<i-1时候进行if判断

i%k==0 当 i 求余k的值是0时,说明 i 将k整除了。

举个例子,10/5=2 余数为0 这个0就是求余后的结果,也可以写成10%2==0;   两个等号的意思是等于,而不是一个等号代表的赋值语句,我以前也会犯这样的错误,如果写成了if(i%k=0) 那语句意思就变成了把0赋值给了 i %k 的结果,那这样 i % k的结果就一直是0,起不到判断的作用了。

这里 i 和k的意思是,i 可以理解为一个从m 到 n 一直增长的一个变量,而 k 从2 开始就是因为素数的定义,素数是大于的1 的整数,并且只能被1和它本身整除,所以k才从2开始。i%k就是为了检验m到n区间内的数(即变量i遍历期间)是否能将k 整除,如果它一直整除,那说明它就不是一个素数,毕竟 当且仅当一个数字被1和它本身整除时才能叫作素数。

感兴趣的同学可以自己逐语句看一下整个过程,这里我用的是VS2019

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int m, n;
    int i;
    int cnt = 0;
    int sum = 0;
    scanf("%d%d", &m, &n);
    if (m == 1)
        m = 2;
    for (i = m; i <= n; i++) {
        int k;
        int isPrime = 1;
        for (k = 2; k < i - 1; k++) {
            if (i % k == 0) {
                isPrime = 0;
                break;
            }
        }

        if (isPrime) {
            cnt++;
            sum += i;
        }
    }
    printf("%d %d\n", cnt, sum);
    return 0;
}

 在vs2019里面如果遇到了scanf返回值被忽略:

可以在代码顶部加上一行: 

 这样就不会报错了。

知道了要输入两个变量接受值、要用if做出判断:是否是素数,进行求和 和计数、用for循环进行遍历、添加相应的条件,例如:if(i%k==0)进行判断。 有了这些思考,我们再写出一个相关的代码也就不太难了,起码不像我们一开始看到题目毫无思路。

看到问题勤思考,小张和你共成长!

谢谢大家的观看!

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

【C语言】统计素数并求和 的相关文章

随机推荐

  • 图的邻接矩阵与邻接表的建立,c/c++描述

    图里数据节点是多对多的关系 一个节点有多个前驱 也有多个后继 甚至还有无向图 不区分前驱和后继 只需要节点之间有邻接关系即可 因此 描述这种数据关系 需要新的数据结构 图有顶点集和边集组成 顶点代表一个数据节点 边代表数据顶点间的邻接关系
  • impdp参数+impdp交互模式的命令列表

    impdp参数 1 help 是否显示用于导入的联机帮助 2 exclude 排除特定的对象豢型 3 directory 让转储文件 日志文件和sql文件使用的目录对象 4 dumpfile 需要导入的转储文件的列表 5 include 包
  • c语言如何定义标识符 常量 变量,标识符、常量和变量

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1 单选题 C语言主要是借助以下哪个功能来实现程序模块化 A 定义函数 B 定义常量和外部变量 C 三种基本结构语句 D 丰富的数据类型 参考答案 A 参考解析 C语言用函数实现软件的模块化设计
  • 小程序原理

    开发过一段时间小程序了 对于我们现在使用的业务来说 使用小程序开发上手很快 所以反思了一下 那么小程序的原理到底是怎么样的呢 我自己总结一下 小程序的架构 官网原话 当小程序基于 WebView 环境下时 WebView 的 JS 逻辑 D
  • deepfake教程

    https github com iperov DeepFaceLab 首先下载根据不同系统不同显卡分类下载对应版本 能在文件夹下看到以下命令 一 clear workspace 重置 一 提取帧 extract images from v
  • k8s占用的端口号用 kubectl get svc 和lsof -i、netstat 命令都查不到

    如果你使用了 kubectl get svc 和 lsof i 或 netstat 命令查看端口 却没有查到 Kubernetes 的服务 有可能是因为 Kubernetes 服务运行在容器内部 在这种情况下 你可以通过以下步骤来查看 Ku
  • 音视频 ffmpeg ffplay ffprobe命令行

    ffmpeg工具 命令格式 ffmpeg 全局选项 输入选项 i input url 输出选项 output url 帮助命令 查看解封装帮助 dhav ffmpeg4 2才有 ffmpeg h demuxer dhav ffmpeg h
  • 黄广斌谈ELM进展:为深度学习提供理论支持, 将勾连生物学习

    强大的深度神经网络 仍有很多待解决的问题 超限学习机 ELM 发明人 新加坡南阳理工大学副教授黄广斌认为 ELM能够有效地拓展神经网络的理论和算法 近日 黄广斌发表文章 超限学习机 筑梦普适学习和普适智能 Extreme learning
  • 【数据结构】堆的向上调整和向下调整以及相关方法

    文章目录 一 堆的概念 二 堆的性质 三 堆的分类 1 大根堆 2 小根堆 四 说明 五 堆的结构 六 堆的向上调整 1 图示 2 代码实现 3 时间复杂度分析 七 堆的向下调整 1 思路 2 代码实现 八 删除根 1 思路 2 代码实现
  • CentOS6 YUM 源失效问题解决办法

    问题描述 Yum 源失效 无法正常使用 Yum 错误信息如下 http mirrors aliyun com centos 6 updates x86 64 repodata repomd xml Errno 14 PYCURL ERROR
  • CentOs 6.5下java 安装

    我们下载jdk 的rpm包到要安装的服务器上 然后要进行下面的工作 1 移除系统自带的jdk 1 查找系统自带的jdk版本 输入命令 rpm qa grep jdk 2 移除系统自带的jdk 输入命令 yum y remove java 1
  • fatal: Not a git repository (or any of the parent directories): .git

    问题描述 解决方案
  • js之事件委托

    在js的事件流模型中 事件的触发分为3个阶段 1 捕获阶段 由外向内传播 寻找目标元素 2 目标阶段 找到事件触发的目标元素 3 冒泡阶段 事件由内向外冒泡 事件委托也被称为事件代理 那么是事件委托呢 用一个例子来说明 div div di
  • 万字详解:Activiti 工作流引擎

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网
  • BART论文要点解读:看这篇就够了

    全称 Denoising Sequence to Sequence Pre training for Natural Language Generation Translation and Comprehension BART来源于Bidi
  • java晋级赛 深入并发编程

    根据黑马java并发编程学习做的笔记 传送门 https www bilibili com video BV16J411h7Rd p 15 java晋级赛 深入并发编程 一 多线程基础 进程与线程 创建线程的方式及运行原理 创建线程的方式
  • 进程调度的控制—文件锁

    前言 在进程之间 我们不能决定应该先去调度哪一个进程 这时候我们就需要对一个文件加锁 来要求那个先来执行 整体文件锁 int flock int fd int operation fd 文件描述符 operation 定义的宏 也就是选项
  • STL标准模板库学习笔记一(STL序列容器)

    目录 STL 容器 STL迭代器 array vector deque功能 list 和 forward list 功能 vector emplace back 和push back 的区别 vector插入函数insert和emplace
  • ST7796S MIPI单通道, 320x480初始化代码

    ST7796S MIPI单通道接口 320x480分辨率初始化代码 代码示例 loadWidthSet 320 loadHeightSet 480 loadHBPSet 180 loadVBPSet 20 loadHFPSet 20 loa
  • 【C语言】统计素数并求和

    改名字了 2022 2 26之前叫 回到正题 由题可知 题目要求在用户自己输入的定整数M和N区间内求出素数的个数 并且对他们求和 要想解决编程题目 首先要知道题目问的是什么 素数一般指质数 质数是指在大于1的自然数中 除了1和它本身以外不再