题目

打印100以内的素数

思路1

素数的特点:

  1. 素数一定是奇数
  2. 一个数如果是合数,那么它一定能够被2到这个合数的开平方内的某个素数整除(这个特点是提升效率的关键)
  3. 一个数如果不能被从2到它自身开平方的所有素数整除,那么这个数一定是素数

实施步骤1

  1. 每求一个素数都把它记录下来;放在一个列表或者数组中;
  2. 只在奇数中判断是否是素数;
  3. 只拿求过的素数来进行验证当前奇数是否是素数;
  4. 只验证到自身开平方;

代码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

  1. 构造一个列表或者数组存放100个长度,存放的都是1
  2. 去除列表中的合数(标记为0)
  3. 打印列表或者数组总标记为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以内的素数的更多相关文章

  1. python每日经典算法题5(基础题)+1(中难题)

    现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...

  2. python每日经典算法题5(基础题)+1(较难题)

    一:基础算法题5道 1.阿姆斯特朗数 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数.判断用户输入的数字是否为阿姆斯特朗数. (1)题目分析:这里要先得到该数是多少位的,然后再把 ...

  3. python3编写程序,实现打印100以内的素数。

    代码如下: for x in range(2, 100): for y in range(2, x): if x % y == 0: break else: print(x, end="\t ...

  4. 10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:   ...

  5. Python练习题 026:求100以内的素数

    [Python练习题 026] 求100以内的素数. ------------------------------------------------- 奇怪,求解素数的题,之前不是做过了吗?难道是想 ...

  6. 经典算法题每日演练——第十六题 Kruskal算法

    原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...

  7. 经典算法题每日演练——第十四题 Prim算法

    原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...

  8. [经典算法题]寻找数组中第K大的数的方法总结

    [经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26   字体:[大 中 小] 打印复制链接我要评论   今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...

  9. 实现100以内的素数输出(Python与C++对比)

    今天从链接http://www.2cto.com/kf/201302/187699.html中看到了Python实现100以内的素数输出的算法,颇受感触.尤其是被其中的Python的列表生成器的使用方 ...

随机推荐

  1. Linux学习资料网站汇总链接(持续更新ing)

    排名不分先后. 学海无涯苦作舟. 博客: 1.slmba:LINUX博客原创大牛 2.edsionte's TechBlog:Linuxer (他的友情链接中还有一堆Linuxer,被公司屏蔽进不去. ...

  2. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家  叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...

  3. COGS 2089. 平凡的测试数据

    [题目描述] 树链剖分可以干什么? “可以支持在树中快速修改一个点信息,快速询问一条链信息” LCT可以干什么? “可以支持树链剖分支持的特性,并且支持快速链接两个棵树,或者断开某条边” 那我现在要出 ...

  4. x509: certificate is valid for 10.96.0.1, 172.18.255.243, not 120.79.23.226

    服务器:阿里云服务器 master:120.79.23.226 node:39.108.131.246 系统:Centos 7.4 node节点加入集群中是报错: x509: certificate ...

  5. Flask框架整个流程源码解读

    Flask框架整个流程源码解读 一.总的流程 运行Flask其本质是运行Flask对象中的__call__,而__call__本质调用wsgi_app的方法 wsgi_app方法 def wsgi_a ...

  6. API 网关的选型和持续集成

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,APISIX 作者温铭在活动上做了< API 网关的选 ...

  7. maven子项目导出成jar包及运行

    第一步:选这idea右侧栏的maven projects 第二步:选中需要打包成jar包的项目下的lifecycle 第三步:选中package 第四步:点击开始导出 第五步:使用winRAR打开ja ...

  8. 浅谈线段树 Segment Tree

    众所周知,线段树是algo中很重要的一项! 一.简介 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在 ...

  9. @RequestParam设置默认可以传空值

    设置如下:@RequestParam(value="CbqkJson[]",required=false)String[] CbqkJson required=false 如果不设 ...

  10. 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)

    摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...