C++大学教程(第九版)6.29素数

题目

(素数)素数是只能被1和自已整除的整数。例如,235和7是素数而468和9不是素数
a)编写一个函数,确定一个数是否是素数。
b)在程序中使用这个函数,该程序确定和打印2 ~10000之间的所有素数。在确信已找到所有的素数之前,实际需测试这些数中的多少个数?
c)起初,你可能认为 n/2 是确定一个数是否为素数所要进行的最多的测试次数,但是实际上只需要进行n的平方根次就可以了。为什么呢?重新编写程序,用这两种方式运行。估计性能提高了多少。

b)代码

b)实际需要测试这些数中的5000个,满足条件的代码如下:
增加了计算程序运行时间的部分。

#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;

bool isPrime(int);

int main()
{
    clock_t startTime, endTime;
    startTime = clock();
    int count = 0;
    for (unsigned long long i = 2; i <= 10000; i++)
    {
        if (isPrime(i))
        {
            cout << setw(4) << i << "\t"; //<< (isPrime(i) ? "是素数" : "")
            count++;
            if (count != 0 && count % 10 == 0)
            {
                cout << endl;
            }
        }
    }

    endTime = clock();

    cout << "\nThe run time is " << static_cast<double>(endTime - startTime) / CLOCKS_PER_SEC
         << "s." << endl;
    return 0;
}

bool isPrime(int n)
{
    bool flag = true;
    for (int i = 2; i < n; i++)
    {

        if (n % i == 0)
            flag = false;
    }

    return flag;
}

运行截图

可以看到程序运行时间0.481s
在这里插入图片描述在这里插入图片描述

c)代码

修改了判断素数的函数代码,并计算了程序运行时间。

思想:素数的因子只有1和它本身。 如果数c不是素数,则还有其他因子。设a,b中定有一个大于sqrt( c ) ,一个小于sqrt( c ) 。所以m一定有一个小于等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。

#include <iostream>
#include <iomanip>
#include <cmath>
#include <ctime>
using namespace std;

bool isPrime(unsigned long);

int main()
{
    clock_t startTime, endTime;
    startTime = clock();

    int count = 0;
    for (unsigned long i = 2; i <= 10000; i++)
    {

        if (isPrime(i))
        {
            cout << setw(4) << i << "\t";
            count++;
            if (count != 0 && count % 10 == 0)
            {
                cout << endl;
            }
        }
    }
    endTime = clock();

    cout << "\nThe run time is " << static_cast<double>(endTime - startTime) / CLOCKS_PER_SEC
         << "s." << endl;
    return 0;
}

bool isPrime(unsigned long n)
{
    bool flag = true;
    unsigned long asquareRoot = static_cast<int>(sqrt(n)); // n的平方根
    for (int i = 2; i <= asquareRoot; i++)
    {
        if (n % i == 0)
            flag = false;
    }

    return flag;
}

运行截图

代码运行时间0.19s,比b)中代码快了不少!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

老师家访的目的是什么

家访&#xff0c;对于老师来说&#xff0c;是工作中必不可少的一部分。有人会问&#xff0c;老师家访的目的是什么呢&#xff1f;是为了了解学生的家庭情况&#xff0c;还是为了和家长建立良好的沟通关系&#xff1f;其实&#xff0c;老师家访的目的远不止于此。 老师家访是为…

MIT6.1810(which was called 6.S081 then) Lab1-4

关于用VScode调试XV6的方法我在上一篇博客有过介绍NJU操作系统课(蒋炎岩) 笔记-CSDN博客 这篇主要记录做XV6 Lab的过程。 关于Lec的学习我英语差而且机翻会有误差(会努力学英语的&#xff01;)&#xff0c;所以我使用肖宏辉大佬自己翻译的书面版本&#xff0c;非常感谢这位大佬…

GPS位置虚拟软件 AnyGo mac激活版

AnyGo for Mac是一款一键将iPhone的GPS位置更改为任何位置的强大软件&#xff01;使用AnyGo在其iOS或Android设备上改变其GPS位置&#xff0c;并在任何想要的地方显示自己的位置。这对那些需要测试应用程序、游戏或其他依赖于地理位置信息的应用程序的开发人员来说非常有用&…

QSqlQuery 执行Update 判断执行成功与否

1.执行更新操作的SQL语句 update s_info set name"009" where contact_number "13511112222" 怎么样判断是否确实更新操作是执行成功的 &#xff0c;可以通过下列语句判断 query.numRowsAffected() > 0 2.主要的几步操作如下: QSqlQuery query;query.…

如何解决GitHub打不开的问题?

网址&#xff1a;https://github.com.ipaddress.com Domain Summary 140.82.114.3 github.com二、查看github.global.ssl.fastly.net的IP地址 网址&#xff1a;https://fastly.net.ipaddress.com/github.global.ssl.fastly.net hostname summary 199.232.69.194 github.global…

Vulnhub-dc4

靶场下载 https://download.vulnhub.com/dc/DC-4.zip 信息收集 判断目标靶机的存活地址: # nmap -sT --min-rate 10000 -p- 192.168.1.91 -oN port.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-21 16:36 CST Stats: 0:00:03 elapsed; 0 hosts completed (1 up…

JAVASE进阶(设计模式、设计原则)(更新中...)

目录 一、注解 内置注解&#xff1a;JAVA中已经定义好的注解。 元注解&#xff1a;修饰注解的注解。 自定义注解。 二、克隆 JAVA中对clone的实现&#xff1f; 浅克隆 深克隆 那么该如何做到深克隆呢&#xff1f; 三、常用设计模式 1、创建型模式 单例模式 工厂模式 工…

从零学Java - Stream API

Java - Stream API 文章目录 Java - Stream API什么是流(Stream)?Stream 的特点Stream使用步骤1 创建 Stream流2 中间操作3 终止操作 什么是流(Stream)? 流&#xff08;Stream&#xff09;与集合类似&#xff0c;但集合中保存的是数据&#xff0c;而Stream中保存对集合或数组…

微信怎么设置自动回复?教程来咯!

自动回复信息 你有没有为了回复微信消息&#xff0c;中断工作进度&#xff0c;耽误了大量时间&#xff1f;或者错过了潜在客户&#xff1f;现在&#xff0c;我们的微信管理系统&#xff0c;可以帮助你在第一时间&#xff0c;实时回复用户消息。 01 # 通过好友自动打招呼# 我们…

技术浪潮中的职业变革:程序员面临的裁员挑战与应对策略

目录 前言 冲破时空壁垒&#xff1a;探索技术变革的酷时代&#xff01; 逆境成长&#xff1a;一个互联网人战胜失业困境的故事 裁员的双面影响&#xff1a;挑战与机遇 应对裁员潮危机&#xff1a;程序员的超级英雄之路 前言 惊人的新闻传来&#xff0c;一对来自中国的工程师…

【Linux与windows的文件互相传输】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 关于 rzsz 注意事项 查看软件包 使用命令 下载到本地&#xff08;使用sz的命令&#xff09; 本地文件上传到Linux中&#xff08;使用rz命令&#xff09; 方法一…

Jumpserver中安装httpx

查看已安装的包 pip freeze # python -V # Python 2.7.5安装anyio 刚开始直接pip install httpx&#xff0c;未设置版本号&#xff0c;因已有idna2.7&#xff0c;所以出现版本不兼容的现象 anyio 3.0.0 requires idna>2.8, but you have idna 2.7 which is incompatible.…

【python】python实现代码雨【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、效果图&#xff1a; 二、准备工作 &#xff08;1)、导入必要的模块&#xff1a; 代码首先导入了需要使用的模块&#xff1a;requests、lxml和csv。 import requests from lxml import etree import csv 如果出现模…

惬意上手Python —— os模块

首先&#xff0c;这部分很简单&#xff0c;不需要有太多的操作&#xff0c;只需要用的时候你知道该用这个模块下的哪个函数。例如&#xff0c;你想知道当前路径&#xff0c;就该知道用 curdir 这个函数。 在Python中&#xff0c;os模块是一个与操作系统交互的标准库模块&…

前端面试题-(BFC,前端尺寸单位,网站页面常见的优化手段)

前端面试题-BFC&#xff0c;前端尺寸单位&#xff0c;网站页面常见的优化手段 BFC前端尺寸单位网站页面常见的优化手段 BFC BFC&#xff08;block formartting context&#xff09;块格式化上下文。是通过独立渲染的区域&#xff0c;它拥有自己的渲染规则&#xff0c;可以决定…

【Linux】-对于信号章节补充的知识点,以及多线程知识的汇总

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

pytest+allure 生成中文报告

背景 已安装pytestallure&#xff0c;生成的报告是英文 allure生成中文报告 参考&#xff1a;allure report 报告中文化及其它优化 方法1&#xff1a;直接在报告中切换中文 方法2&#xff1a;依赖系统中文语言 创建一个setting.js 文件在index.html 同级目录 // 尝试从 l…

Python - 【Socket】消息粘包处理demo(一)

一. 前言 在网络编程中&#xff0c;粘包是指TCP协议在传输过程中&#xff0c;多条数据被合并成一条数据发送或者一条数据被拆分成多个数据发送的现象。 二. 粘包问题的常规处理方法&#xff1a; 使用固定长度的包头 可以在发送数据前先发送一个固定长度的包头&#xff0c;包…

赠书活动~

关注公众号获得&#xff0c;发送抽奖

hcip---ppp协议

一&#xff1a;网络类型----根据二层数据链路层使用协议的不同&#xff0c;进行的划分 MA--多点接入网络 BMA--广播型多点接入网络 NBMA--非广播型多点接入网络 P2P--点到点网络&#xff1a;当网络中只能两台设备存在&#xff0c;那么这样的网络不需要MAC也能进行通信 二层协议…