牛客网刷题 | BC81 KiKi求质数个数

news2024/11/19 17:48:16

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

KiKi知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。

输入描述:

输出描述:

一行,一个整数,表示所有三位整数中,有多少个质数。


思路 : 

理解质数:质数是指只能被1和它本身整除的大于1的自然数。例如,2、3、5、7等都是质数。

定义范围:题目要求找出所有三位整数中的质数个数,即我们需要检查的数的范围是从100到999。

判断质数:对于每一个数,我们需要判断它是否是质数。判断一个数是否是质数的常见方法是尝试除以所有小于或等于它的平方根的数。如果在这个范围内没有找到除数,那么这个数就是质数。

优化检查:由于我们知道所有质数除了2以外都是奇数,我们可以从3开始检查,并且每次增加2(跳过偶数),这样可以减少不必要的检查。

计数:对于每一个被判断为质数的数,我们增加计数器的值。

输出结果:在遍历完所有的三位整数后,输出计数器的值,这个值就是所有三位整数中质数的个数。


代码 1:

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

 代码 2 :

#include <stdio.h>
int main() {
   方法1:
        求素数数量,总数减非素数数量

        int totalNum = (999 - 100) + 1;
        int count = 0;
        for (int i = 100; i < 1000; i++)
        {
            for (int j = 2; j * j <= i; j++)
            {
                if (i % j == 0)
                {
                    count++;
                    break;
                }
            }
        }
        printf("%d\n", totalNum - count);
  

    /* 方法2:
        用flag标记,1为素数,0为非素数;
        默认flag为1,若在内循环i被j整除,则设flag为0,表示i为非素数;
        内循环判断完后判断flag值,flag为1则prime++;
        注意要将flag重置为1
*/
    int prime = 0, flag = 1;
    for (int i = 100; i < 1000; i++) {
        for (int j = 2; j * j <= i; j++) {
            if (i % j == 0) {
                flag = 0;
                break;
            }
        }
        if (flag == 1) {
            prime++;
        }
        flag = 1;
    }
    printf("%d\n", prime);
    

    /* 方法3:
        当j * j <= i时,i % j == 0,那么说明i能被j整除,i不是素数
        当j * j > i时,说明i % j != 0,说明i不能被j整除,i是素数
        注意除数j重置为2,因为j的作用域为整个外循环
    */
    int cnt = 0;
    int i, j;
    for (i = 100; i < 1000; i++) {
        for (j = 2; j * j <= i; j++) {
            if (i % j == 0) {
                break;
            }
        }
        if (j * j > i) {
            cnt++;
        }
        // Reset divisor
        j = 2;
    }
    printf("%d\n", cnt);
    return 0;
}

代码 3 :

AI 写的

#include <stdio.h>
#include <math.h>

// 函数声明,判断一个数是否为质数
int isPrime(int num);

int main() {
    int count = 0; // 用于计数的变量
    for (int i = 100; i <= 999; i++) { // 遍历所有的三位整数
        if (isPrime(i)) { // 如果i是质数
            count++; // 计数器增加
        }
    }
    printf("%d\n", count); // 输出质数的个数
    return 0;
}

// 函数定义,判断一个数是否为质数
int isPrime(int num) {
    if (num <= 1) return 0; // 小于等于1的数不是质数
    if (num == 2) return 1; // 2是质数
    if (num % 2 == 0) return 0; // 排除大于2的偶数
    for (int i = 3; i <= sqrt(num); i += 2) { // 从3开始,以2为步长遍历
        if (num % i == 0) return 0; // 如果num能被i整除,则不是质数
    }
    return 1; // 如果没有找到除数,则num是质数
}

知识点 : 

质数定义

质数是指只能被1和它本身整除的大于1的自然数。

循环结构

使用循环结构遍历指定范围内的所有整数。

条件判断

使用条件语句来判断一个数是否满足质数的条件。

函数设计

设计一个函数isPrime来判断一个整数是否是质数。

数学知识

利用数学知识优化质数判断过程,例如,只检查到该数的平方根。

迭代器步长

在循环中使用步长为2,只检查奇数,因为除了2以外,所有质数都是奇数。

平方根函数

使用sqrt()函数来获取一个数的平方根,减少不必要的计算。

模运算

使用%运算符来判断一个数是否能被另一个数整除。

控制流程

使用return语句从函数返回,以及结束程序的执行。

输入输出

使用printf()函数进行输出。

基本数据类型

使用基本数据类型int来存储整数。

变量声明与初始化

声明并初始化变量用于计数和循环控制。

代码结构

理解并实现程序的基本结构,包括主函数main和辅助函数。

算法效率

理解算法的时间复杂度,并尝试优化以提高效率。

 

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1655309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android基础-多线程

多线程&#xff1a; 创建子线程&#xff0c;子线程不允许直接更新UI&#xff0c;试想下如果多个线程去更新UI&#xff0c;则会造成资源错乱&#xff0c;如果枷锁就会使得代码冗余复杂。 android异步处理&#xff1a; 另一种异步多线程方法 doInBackground是在子线程中。

【线性代数】俗说矩阵听课笔记

基础解系的概念 31线性相关&#xff0c;线性无关&#xff0c;拓展与证明 n个m维向量在n<m时可能线性相关也可能线性无关&#xff0c;线性无关时可以构成某个m维空间的一组基。m不小于n时&#xff0c;秩小于n则线性相关。 n个m维向量在n>m时可一定线性相关。低维向量一定…

运行Spring Boot项目失败?显示java: 无法访问org.springframework.boot.SpringApplication,让我来看看~

idea项目运行报错截图&#xff1a; &#xff08;1&#xff09;查看错误提示“类文件具有错误的版本 61.0, 应为 52.0”&#xff0c;61.0对应的是jdk17&#xff0c;52.0对应1.8。 通过这个网址可以查询版本&#xff1a; https://stackoverflow.com/questions/9170832/list-of-ja…

[C/C++] -- 代理模式

代理模式是一种结构型设计模式&#xff0c;允许一个对象&#xff08;代理&#xff09;控制另一个对象的访问。代理对象通常充当客户端和实际目标对象之间的中间人&#xff0c;从而控制对目标对象的访问&#xff0c;可以在访问前后进行一些额外的处理。 代理模式的优点包括&…

线程的组成、执行特点、创建的两种方式

线程的组成&#xff1a; cpu时间片 运行内存&#xff1a;栈、堆 线程的逻辑代码 线程执行的特点&#xff1a; 抢占式执行&#xff0c;结果随机&#xff0c;效率高&#xff0c;可以防止单一线程长时间独占CPU 在单核cpu中&#xff0c;宏观上同时执行&#xff0c;微观上顺序…

C++:纯虚函数

在 C 中&#xff0c;纯虚函数&#xff08;pure virtual function&#xff09;是一个在基类中声明为纯虚函数的虚函数&#xff08;如果对虚函数不了解可以去我上一篇文章&#xff1a;C:虚函数&#xff09;。它在基类中没有默认实现&#xff0c;而是要求派生类提供实现。通过声明…

stm32f103zet6_RTC_1_介绍

RTC简介 实时时钟是一个独立的定时器。 RTC模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可 提供时钟日历的功能。 修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域&#xff0c;即在系统复…

初学java

注意点 1.使用关键字long的时候&#xff0c;在其赋值的时候要在后面加上大写或者小写的l&#xff0c;个人推荐大写&#xff0c;小写与数‘1’难区分。 2.函数的名字要与文件夹的名字相同&#xff0c;并且文件夹后面一定要有.java。例如这个的名字是Main,函数就得用这个&#x…

SwiGLU激活函数

SwiGLU激活函数已经成为LLM的标配了。它是GLU的变体&#xff0c;公式如下&#xff1a; SwiGLU ⁡ ( x , W , V , b , c , β ) Swish ⁡ β ( x W b ) ⊗ ( x V c ) \operatorname{SwiGLU}(x, W, V, b, c, \beta)\operatorname{Swish}_\beta(x Wb) \otimes(x Vc) SwiGLU(x,…

Linux中的简单操作 ls/tar/pwd/cd/mkdir/touch 等

目录 前言 安装和卸载软件包 ls 查看指定路径下的文件和文件夹 tar 解压缩/压缩命令 pwd 查看当前路径 cd 改变目录 mkdir 创建目录 递归创建 rm rmdir 删除文件或目录 touch 创建文件 ll、echo、重定向符&#xff08;>,>>&#xff09; ll echo 重定向符…

VS编辑器下使用MFC完成水果销售系统

背景&#xff1a; 项目11&#xff1a;水果销售管理系统 &#xff08;2周&#xff09; &#xff08;一&#xff09;实验目的 通过该实验&#xff0c;使学生掌握windows程序设计的基本方法。以水果销售管理为背景&#xff0c;熟练应用数据库技术和第三方插件的嵌入技术&…

安卓自定义View

部分效果如下&#xff1a; 完整项目地址&#xff1a;https://download.csdn.net/download/qq_41733851/89282771?spm1001.2101.3001.9500

elk + filebeat 8.4.3 收集nginx日志(docker部署)

ELK filebeat docker部署 一、 elasticsearch部署1、运行elasticsearch临时配置容器2、拷贝文件目录到本地3、检查elasticsearch.yml4、删除之前elastic&#xff0c;运行正式容器5、docker logs记录启动日志 二、部署kibana1、运行kibana临时配置容器2、docker拷贝配置文件到本…

日志审计系统在提高网络安全方面具有哪些重要的作用

随着信息技术的飞速发展&#xff0c;我们正处于一个高度互联、数据驱动的网络时代。在这个时代&#xff0c;日志审计系统作为网络安全和信息管理的重要工具&#xff0c;发挥着至关重要的作用。下面德迅云安全就详细介绍下关于日志审计系统在当今网络时代的重要性。 一、什么是日…

Encoder——Decoder工作原理与代码支撑

神经网络算法 &#xff1a;一文搞懂 Encoder-Decoder&#xff08;编码器-解码器&#xff09;_有编码器和解码器的神经网络-CSDN博客这篇文章写的不错&#xff0c;从定性的角度解释了一下&#xff0c;什么是编码器与解码器&#xff0c;我再学习笔记补充的时候&#xff0c;讲一下…

LeetCode—随机链表的复制(深拷贝)

一.题目 二.思路分析 1.将拷贝节点插入到原节点后面 拷贝节点和原节点建立了一个关联关系 2.深拷贝 3.将新节点拿下来尾插形成新链表&#xff0c;恢复原链表 三.参考代码 /*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct No…

感应关盖垃圾桶项目

1.功能描述 检测靠近时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 发生震动时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 按下按键时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 2.硬件说明 SG90舵机&#xff0c;超声…

java项目之校园失物招领系统(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园失物招领系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园失物招领系统的主要…

springcloud -nacos实战

一、nacos 功能简介 1.1.什么是Nacos&#xff1f; 官方简介&#xff1a;一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 Nacos的关键特性包括&#xff1a; 服务发现和服务健康监测动态配置服务动态DNS服务服务及其元数…

【青龙面板教程】保姆级拉库 Faker库 以及依赖安装教程

青龙面板最新版拉库教程 新版青龙&#xff08;订阅&#xff09;拉库教程 拉库前请打开青龙面板-配置文件 第18行 GithubProxyUrl"" 双引号中的内容清空复制以下拉库命令即可。Faker2 助力池版【安全本地sign防CK泄漏】使用助力池请在群里发"助力池" 机器…