python、C++经典算法题:打印100以内的素数
题目
打印100以内的素数
思路1
素数的特点:
- 素数一定是奇数
- 一个数如果是合数,那么它一定能够被2到这个合数的开平方内的某个素数整除(这个特点是提升效率的关键)
- 一个数如果不能被从2到它自身开平方的所有素数整除,那么这个数一定是素数
实施步骤1
- 每求一个素数都把它记录下来;放在一个列表或者数组中;
- 只在奇数中判断是否是素数;
- 只拿求过的素数来进行验证当前奇数是否是素数;
- 只验证到自身开平方;
代码1
有了上面的分析,就可以动手写代码了, 我写了C++版本的和Python的版本的两种,如下:
C++版本:
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int main()
{
int prime[100] = {2, 3};
for(int i=5; i<100; i += 2)
{
int j = -1;
int edge = pow(i, 0.5);
int flag = 0;
while (j < 100)
{
j++;
if (prime[j] == 0)
continue;
if (prime[j] > edge)
{
flag = 1;
break;
}
if (i % prime[j] == 0)
{
flag = 2;
break;
}
}
if (flag == 1)
prime[i] = i;
else
continue;
}
for (int i=0; i<100; i++)
{
if (prime[i] != 0)
cout<<setw(3)<<prime[i];
}
system("pause");
return 0;
}
python版本:
prime = [2, 3]
for i in range(5, 100, 2):
edge = i ** 0.5
for j in prime:
if j > edge:
prime.append(i)
break
if i % j == 0:
break
思路2
在思路1的基础上,我们可以把合数去掉,我们从2到它自身开平方的数的倍数从数组或者列表中去掉,那么剩下的数字一定是素数了。
实施步骤2
- 构造一个列表或者数组存放100个长度,存放的都是1
- 去除列表中的合数(标记为0)
- 打印列表或者数组总标记为1的数字就是素数了。
代码2
C++版本
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int sum=0, a[100]={0};
for (int i=2; i<sqrt(100.0); i++)
{
sum = i;
if (a[sum]==0)
{
while (sum < 100)
{
sum = sum + i;
if (sum<100)a[sum] = 1;
}
}
}
for (int i=2; i<100; i++)
{
if (a[i] == 0)cout<<i<<" ";
}
}
Python版本
lst = [0] * 100
for i in range(2, 11):
su = i
while su < 100:
su += i
try:
lst[su] = 1
except IndexError:
pass
for i in range(2, 100):
if lst[i] == 0:
print(i, end=" ")
人生苦短,我用python!
python 只需要C++ 20%的代码量就能解决相同的问题!
python、C++经典算法题:打印100以内的素数的更多相关文章
- python每日经典算法题5(基础题)+1(中难题)
现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...
- python每日经典算法题5(基础题)+1(较难题)
一:基础算法题5道 1.阿姆斯特朗数 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数.判断用户输入的数字是否为阿姆斯特朗数. (1)题目分析:这里要先得到该数是多少位的,然后再把 ...
- python3编写程序,实现打印100以内的素数。
代码如下: for x in range(2, 100): for y in range(2, x): if x % y == 0: break else: print(x, end="\t ...
- 10道java经典算法题,每一题都能帮你提升java水平!
JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: ...
- Python练习题 026:求100以内的素数
[Python练习题 026] 求100以内的素数. ------------------------------------------------- 奇怪,求解素数的题,之前不是做过了吗?难道是想 ...
- 经典算法题每日演练——第十六题 Kruskal算法
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...
- 经典算法题每日演练——第十四题 Prim算法
原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...
- [经典算法题]寻找数组中第K大的数的方法总结
[经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26 字体:[大 中 小] 打印复制链接我要评论 今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...
- 实现100以内的素数输出(Python与C++对比)
今天从链接http://www.2cto.com/kf/201302/187699.html中看到了Python实现100以内的素数输出的算法,颇受感触.尤其是被其中的Python的列表生成器的使用方 ...
随机推荐
- python编程基础之十三
列表的通用操作: list1 = [43, 65, 76, 6] list2 = [45, 77, 90, 11, 2, 4, 66] print(list1+ list2) # 列表组合 prin ...
- ES三节点重启后报错no known master node
问题 一直在研究ES的监控怎么做,想偷点懒,不去通过API获取然后计算,就想找个现成的插件或者监控软件,只要装个agent就可以,然后就找到了x-pack,插件装好了之后,需要重启ES集群,线上的ES ...
- django模型中有外键关系的表删除相关设置
0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author.AuthorDetail两表 author = models.OneToOneField(to='Aut ...
- Bran的内核开发教程(bkerndev)-06 全局描述符表(GDT)
全局描述符表(GDT) 在386平台各种保护措施中最重要的就是全局描述符表(GDT).GDT为内存的某些部分定义了基本的访问权限.我们可以使用GDT中的一个索引来生成段冲突异常, 让内核终止执行异 ...
- .NET Core API后台架构搭建
ASP.NET Core API后台架构搭建 项目文件:https://files.cnblogs.com/files/ZM191018/WebAPI.zip 本篇可以了解到: 依赖注入 Dapper ...
- Spring Boot 入门(七):集成 swagger2
本片文章是基于前一篇写的,<Spring Boot 入门(六):集成 treetable 和 zTree 实现树形图>,本篇主要介绍了spring boot集成swagger2.关于swa ...
- Go语言系列开发之延迟调用和作用域
Hello,各位小伙伴大家好,我是小栈君,最近一段时间我们将继续分享关于go语言基础系列,当然后期小栈君已经在筹划关于java.Python,数据分析.人工智能和大数据等相关系列文章.希望能和大家一起 ...
- windows 抓hash获取管理员密码
webshell 找能执行权限的目录上传 C:\Windows\System32\config\sam 内有windows 密码 利用工具把密码抓出来 samcopy 直接抓取 GetHASHES.e ...
- 02jmeter-函数助手使用
示例:__Random函数 1.打开函数助手,并按提示写入value 2.引用.复制出${__Random(1,99,gp)}放到需要引用的地方 3.请求成功后可通过debug sampler查看变量 ...
- 从零开始把项目发布到NPM仓库中心
从零开始把项目发布到NPM仓库中心 前期准备 注册账号 https://www.npmjs.com/signup 网易邮箱注册失败,用QQ邮箱成功 使用npm 命令注册(建议使用网页): npm ad ...