题目

打印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. Java表达式计算转型规则

    本题答案应为:B.C.D ------------知识点------------ Java表达式转型规则由低到高转换(例如int 到 double): 1.所有的byte,short,char型的值将 ...

  2. C++简单程序设计

    计算机的最基本功能是数据处理 l  C++支持的基本数据类型: n  整数.实数.字符.布尔数据 l  C++支持的基本运算 n  算术运算.关系运算.逻辑运算.位运算.逗号运算.条件运算 程序要能够 ...

  3. Numpy中的一点小知识

    train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset()train_set_x_orig ...

  4. 如何成为一个伟大的 JavaScript 程序员

    这篇文章主要概述在我5年工作经验的基础上,我成为优秀JavaScript开发人员所使用的技术和资源. 当前大多数Web开发人员面临着这样一个共同的问题:他们必须在多个不同的领域领先于他人——从数据库到 ...

  5. 面试官,不要再问我“Java 垃圾收集器”了

    如果Java虚拟机中标记清除算法.标记整理算法.复制算法.分代算法这些属于GC收集算法中的方法论,那么"GC收集器"则是这些方法论的具体实现. 在面试过程中这个深度的问题涉及的比较 ...

  6. python编程系列---args与kwargs详解

    args与kwargs详解 """ Process([group [, target [, name [, args [, kwargs]]]]]) - target:目 ...

  7. tomcat+Apache介绍

    tomcat不是一个完整意义上的Jave EE服务器,它甚至都没有提供对哪怕是一个主要Java EE API的实现:但由于遵守apache开源协议,tomcat却又为众多的java应用程序服务器嵌入自 ...

  8. JavaScript如何工作:垃圾回收机制 + 常见的4种内存泄漏

    原文地址: How JavaScript works: memory management + how to handle 4 common memory leaks 本文永久链接:https://d ...

  9. 微信小程序文件压缩上传

    试用场景:上传图片过大,需进行压缩处理. 涉及微信API API 说明 文档 chooseImage 选择图片 https://developers.weixin.qq.com/miniprogram ...

  10. 基于 HTML5 + WebGL 的 3D 可视化挖掘机

    前言 在工业互联网以及物联网的影响下,人们对于机械的管理,机械的可视化,机械的操作可视化提出了更高的要求.如何在一个系统中完整的显示机械的运行情况,机械的运行轨迹,或者机械的机械动作显得尤为的重要,因 ...