运用C++查找素数

这篇具有很好参考价值的文章主要介绍了运用C++查找素数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

查找素数是在学习C/C++中基本的问题,主要是考察对循环的应用,逻辑上并不是很难。

对于常规的素数查找法,解题步骤通常是:(以查找100以内的素数为例)

1.从2开始逐步循环;

2.再进行嵌套循环,判断2能否被2之后的数字整除;

3.如果恰好有能被整除的则结束循环;如果没有则输出素数;

4.一直重复上面的步骤,就能找出100以内的全部素数。

代码如下

#include<iostream>
using namespace std;
int main()
{
	int i,j,k,MAX;
	cout<<"请输入你要查找多少以内的素数?"<<endl;
	cin>>MAX;
	for(i=2;i<=MAX;i++)
	{
		for(j=2;j<i;j++)
			if(i%j==0)
				break;
		if(j==i)
		{
			cout<<i<<"  ";
		}
	}
	cout<<endl;
	return 0; 
}

运行结果为:

运用C++查找素数

 

这个代码足够解决这个问题,但是缺陷就是速度太慢,时间复杂度达到!!!

仅仅是求100以内的素数就花了2ms;求100000以内的素数花了2218ms!

所以我们进一步改善求解的思路。

我们知道如果一个数不被它以内的素数整除,就代表它是素数!有了这个思想,我们设计出了进阶算法,来求素数。

代码如下:

#include<iostream>
using namespace std;
int main()
{
	// 定义一个数组存放素数 
	int MAX,n=1,j;
	cout<<"请输入你要查找多少以内的素数?"<<endl;
	cin>>MAX;
	int list[MAX];
	// 查找MAX以内的素数存放到数组中
	list[0]=2; 
	for(int k=3;k<=MAX;k++)
	{
		for(j=0;j<n;j++)
		{
			if(k%list[j]==0)
				break;
		}
		if(j==n)
		{
			list[n]=k;
			n++;
		}
		
	}
	for(int i=0;i<n;i++)
		cout<<list[i]<<"  ";
	cout<<endl;
	cout<<"在"<<MAX<<"以内一共有"<<n<<"个素数!"<<endl; 
	return 0;
}

运行结果为:

运用C++查找素数

 改良后的代码所花时间更好,在求100以内的素数时花费0ms,在求10000以内的素数时仅花费2ms!下面我们进行一下比较。

在两个代码上都加上可以求运算时间的函数,代码如下:

// 常规求法
#include<iostream>
#include<ctime> 
using namespace std;
int main()
{
	// 计算运行的时间
	int begintime,endtime;
	int i,j,k,MAX;
	cout<<"请输入你要查找多少以内的素数?"<<endl;
	cin>>MAX;
	int n=0;
	begintime=clock();	//计时开始
	for(i=2;i<=MAX;i++)
	{
		for(j=2;j<i;j++)
			if(i%j==0)
				break;
		if(j==i)
		{
			cout<<i<<"  ";
			n++; 
		}
	}
	endtime = clock();	//计时结束
	cout<<endl;
	cout<<"在"<<MAX<<"以内一共有"<<n<<"个素数!"<<endl;
	cout<<"花费时间为:"<<endtime-begintime<<"ms"<<endl;
	return 0; 
}
// 改善算法代码
#include<iostream>
#include<ctime> 
using namespace std;
int main()
{
	// 计算运行的时间
	int begintime,endtime; 
	// 定义一个数组存放素数 
	int MAX,n=1,j;
	cout<<"请输入你要查找多少以内的素数?"<<endl;
	cin>>MAX;
	int list[MAX];
	// 查找MAX以内的素数存放到数组中
	list[0]=2; 
	begintime=clock();	//计时开始
	for(int k=3;k<=MAX;k++)
	{
		for(j=0;j<n;j++)
		{
			if(k%list[j]==0)
				break;
		}
		if(j==n)
		{
			list[n]=k;
			n++;
		}
		
	}
	endtime = clock();	//计时结束
	for(int i=0;i<n;i++)
		cout<<list[i]<<"  ";
	cout<<endl;
	cout<<"在"<<MAX<<"以内一共有"<<n<<"个素数!"<<endl; 
	cout<<"花费时间为:"<<endtime-begintime<<"ms"<<endl;
	return 0;
}

分别求100000以内的素数,我们可以得到结果分别为:

运用C++查找素数

 

运用C++查找素数

 两者对比一目了然,修改之后的代码是原来的19.6倍!!!文章来源地址https://www.toymoban.com/news/detail-476219.html

到了这里,关于运用C++查找素数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前沿技术杂谈:迁移学习】迁移学习是在航空业实现人工智能的最后一步吗?

    机器学习模仿人类如何通过经验获取知识。然而,人类也可以在不同的任务之间转移知识。假设您知道如何弹吉他——学习如何弹奏班卓琴对您来说有多难?钢琴呢——你需要多少进一步的学习? 这种建立在以前经验之上的理论,而不是从头开始学习,是当今机器学习的一个

    2024年01月24日
    浏览(38)
  • 【学习】Web测试是在测什么?有哪些容易被忽视的小细节?

    Web测试,这个看似简单的词汇,却关乎着互联网产品的质量和用户体验。那么,Web测试到底在测什么呢? 在探讨这个问题之前,让我们先了解一下Web测试的定义:Web测试是一种针对Web应用程序的测试过程,旨在发现并纠正其中的错误和缺陷,以确保产品的稳定性和可靠性。在

    2024年03月20日
    浏览(32)
  • Python学习37:素数问题(python123)

    描述 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 素数或称质数

    2024年02月05日
    浏览(33)
  • Miller_rabin 素数测试 学习笔记

    一种用来判断素数的算法。 威尔逊定理 若 (p) 为素数, ((p-1)! equiv -1 (mod p)) 。 证明: 充分性证明: 如果 (p) 不是素数,那么他的因数必定存在于$ 1,2,3,dots,p−1$ 之中,所以 (gcd((p-1)!,p)) ,那么 ((p-1)! notequiv -1) 。 必要性证明: 首先,我们知道 $$p-1equiv -1 (mod p)$

    2024年02月15日
    浏览(26)
  • C语言学习 使用函数求素数和

    题目描述 本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。 输入两个正整数m和n(1≤m≤n≤500),求m和n之间的素数和。 素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。 要求定义并调用函数prime(p)判断p是否为素数

    2024年02月03日
    浏览(37)
  • [保研/考研机试] KY163 素数判定 哈尔滨工业大学复试上机题 C++实现

    素数判定 https://www.nowcoder.com/share/jump/437195121691718831561 给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。 测试数据有多组,每组输入一个数n。 对于每组输入,若是素数则输出yes,否则输入no。

    2024年02月13日
    浏览(34)
  • 【C++入门】学习使用二维数组基本知识及用法详解

    🧛‍♂️iecne个人主页: : iecne的学习日志 💡每天 关注 iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 二维数组就是在一维数组上多加一个维度。 建议:以下三种定义方式,利用第二种更加直观,提高代码可读性 第二种就是在定义一

    2024年01月25日
    浏览(41)
  • 【Node.js从基础到高级运用】七、基本的网络编程

    在这一节中,我们将介绍 Node.js 在网络编程方面的基础,特别是如何使用 Node.js 创建一个 HTTP 服务器。这是构建 Web 应用和服务的核心技能。 Node.js 的 http 模块提供了创建 HTTP 服务器和客户端的能力。以下是创建一个基本 HTTP 服务器的步骤: 步骤 1: 导入 http 模块 首先,在你

    2024年03月16日
    浏览(38)
  • docker 学习--03 环境安装(本人使用的win10 Linux也是在win10下模拟)

    docker 学习-- 01 基础知识 docker 学习-- 02 常用命令 docker 学习-- 03 环境安装 docker 学习-- 04 实践 1(宝塔) docker 学习-- 04 实践 2 (lnpmr环境) `` 在 Windows 10 上安装 Docker 分为两种方式:使用 Docker Desktop for Windows 和安装 Docker 工具包。 这里使用的是 Docker Desktop for Windows Docker Deskt

    2024年02月12日
    浏览(26)
  • C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段: 基础篇、STL 篇、高阶数据结构与算法篇 ,相关重点内容如下: 基础篇 : 类与对象 (涉及C++的三大特性等); STL 篇 : 学习使用 C++ 提供的 STL 相关库 ; 高阶数据结构与算

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包