题目

打印100以内的素数

思路1

素数的特点:

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

实施步骤1

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

代码1

有了上面的分析,就可以动手写代码了, 我写了C++版本的和Python的版本的两种,如下:

C++版本:

  1. #include <iostream>
  2. #include <iomanip>
  3. #include <math.h>
  4. using namespace std;
  5. int main()
  6. {
  7. int prime[100] = {2, 3};
  8. for(int i=5; i<100; i += 2)
  9. {
  10. int j = -1;
  11. int edge = pow(i, 0.5);
  12. int flag = 0;
  13. while (j < 100)
  14. {
  15. j++;
  16. if (prime[j] == 0)
  17. continue;
  18. if (prime[j] > edge)
  19. {
  20. flag = 1;
  21. break;
  22. }
  23. if (i % prime[j] == 0)
  24. {
  25. flag = 2;
  26. break;
  27. }
  28. }
  29. if (flag == 1)
  30. prime[i] = i;
  31. else
  32. continue;
  33. }
  34. for (int i=0; i<100; i++)
  35. {
  36. if (prime[i] != 0)
  37. cout<<setw(3)<<prime[i];
  38. }
  39. system("pause");
  40. return 0;
  41. }

python版本:

  1. prime = [2, 3]
  2. for i in range(5, 100, 2):
  3. edge = i ** 0.5
  4. for j in prime:
  5. if j > edge:
  6. prime.append(i)
  7. break
  8. if i % j == 0:
  9. break

思路2

在思路1的基础上,我们可以把合数去掉,我们从2到它自身开平方的数的倍数从数组或者列表中去掉,那么剩下的数字一定是素数了。

实施步骤2

  1. 构造一个列表或者数组存放100个长度,存放的都是1
  2. 去除列表中的合数(标记为0)
  3. 打印列表或者数组总标记为1的数字就是素数了。

代码2

C++版本

  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int main()
  5. {
  6. int sum=0, a[100]={0};
  7. for (int i=2; i<sqrt(100.0); i++)
  8. {
  9. sum = i;
  10. if (a[sum]==0)
  11. {
  12. while (sum < 100)
  13. {
  14. sum = sum + i;
  15. if (sum<100)a[sum] = 1;
  16. }
  17. }
  18. }
  19. for (int i=2; i<100; i++)
  20. {
  21. if (a[i] == 0)cout<<i<<" ";
  22. }
  23. }

Python版本

  1. lst = [0] * 100
  2. for i in range(2, 11):
  3. su = i
  4. while su < 100:
  5. su += i
  6. try:
  7. lst[su] = 1
  8. except IndexError:
  9. pass
  10. for i in range(2, 100):
  11. if lst[i] == 0:
  12. 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. Mac 下安装配置MongoDB讲解

    1.访问官网地址是:MongoDB Download Center | MongoDB,一般下载server的Community 版,对于一般开发人员来说已经够用了.   2.点击“DOWNLOAD( ...

  2. Python3_基础

    目录 数据类型 变量 数据类型的转换 算术操作符 输入 字符串常用方法 数据类型 我们先来看看三种常见的数据类型 字符串 str 在Python中,字符串一般都用引号引起来,不管是用单引号还是双引号都 ...

  3. python-Flask模版注入攻击SSTI(python沙盒逃逸)

    一篇以python Flask 模版渲染为例子的SSTI注入教学~ 0x01 Flask使用和渲染 这里简化了flask使用和渲染的教程 只把在安全中我们需要关注的部分写出来 来一段最简单的FLASK ...

  4. [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动

    Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...

  5. 懒要懒到底,能自动的就不要手动,Hibernate正向工程完成Oracle数据库到MySql数据库转换(含字段转换、注释)

    需求描述 需求是这样的:因为我们目前的一个老项目是Oracle数据库的,这个库呢,数据库是没有注释的,而且字段名和表名都是大写风格,比如 在代码层面的po呢,以前也是没有任何注释的,但是经过这些年,大 ...

  6. 【Labview入门】将输入度数转换为3位精度弧度值

    Labview版本2015 程序如下: 可以右键输出控件选择属性来调整输出的小数位数: 运行结果:

  7. opencv::直方图计算

    直方图概念 上述直方图概念是基于图像像素值,其实对图像梯度.每个像素的角度.等一切图像的属性值,我们都可以建立直方图.        这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见 ...

  8. python学习-异常处理之捕获异常与抛出异常(七)

    捕获异常 python完整的异常处理语法结构如下: 特别说明: 1.try块是必需的,except块和finally,当try块没有出现异常时,程序会执行else块 2.try块后只有一个except ...

  9. Spring 源码阅读之 深入理解 finishBeanFactoryInitialization

    源码入口 上篇博文中我们看到了将Spring环境中的 BeanPostProcessor找出来,添加到BeanFactory中的beanPostProcessors中,统一维护,本片博文继续往下拓展, ...

  10. Spring Cloud ---- 服务消费与负载均衡(feign)

    feign是一个声明式的伪客户端,只需要创建一个接口并且注解,它具有可插拔的特性.feign集合了Ribbon,再与Eurake结合实现服务的注册发现与负载均衡.结合Hystrix,具有熔断功能. 1 ...