题目

打印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. python编程基础之三十二

    成员方法:成员方法就是一个函数,只是作用域在类内,并且第一个参数必须是self,self代表当前对象, class Dog(object): def bark(self): #成员方法,第一个参数必须 ...

  2. 深入理解C#多线程 -戈多编程

    引用(http://www.cnblogs.com/luxiaoxun/p/3280146.html) 一.使用线程的好处   1.可以使用线程将代码同其他代码隔离,提高应用程序的可靠性. 2.可以使 ...

  3. 在SRAM、FLASH中调试代码的配置方法(附详细步骤)

    因为STM32的FLASH擦写次数有限(大概为1万次),所以为了延长FLASH的使用时间,我们平时调试时可以选择在SRAM中进行硬件调试.除此之外,SRAM 存储器的写入速度比在内部 FLASH 中要 ...

  4. 基于Spring Boot的统一异常处理设计

    基于Spring Boot的统一异常处理设计 作者: Grey 原文地址:https://www.cnblogs.com/greyzeng/p/11733327.html Spring Boot中,支 ...

  5. Spring Boot项目中如何定制HTTP消息转换器

    在构建RESTful数据服务过程中,我们定义了controller.repositories,并用一些注解修饰它们,但是到现在为止我们还没执行过对象的转换--将java实体对象转换成HTTP的数据输出 ...

  6. 《Java并发编程实战》读书笔记-第3章 对象的共享

    可见性 在没有同步的情况下,编译器.处理器以及运行时都可能做指令重排.执行结果可能会出现错误 volatile变量 编译器与运行时不会进行指令重排,不会进行缓存,使用volatile变量要满足以下条件 ...

  7. 9.Linux用户管理(下)

    1. 为用户添加密码 [root才能执行] 1为新用户添加密码{只能是root} {密码尽可能的复杂} [0-9][a-Z][a-Z] [!@#$%^&]* [root@yinwucheng ...

  8. 百万年薪python之路 -- MySQL数据库之 永久修改字符串编码 与 忘了密码和修改密码

    永久修改字符集编码的方法: 在mysql安装目录下创建一个my.ini(Windows下)文件,写入下面的配置,然后重启服务端. [client] #设置mysql客户端默认字符集 default-c ...

  9. 百万年薪python之路 -- 递归

    递归(每当有一个函数被递归调用,就应该要有一个返回值,才能正常把递归的返回值'归'回来) 一个正经的递归: ​ 1.不断调用自己本身 ​ 2.有明确的结束条件 递归注重于"一递 一归&quo ...

  10. springboot 打jar包时分离配置文件

    修改pom.xml文件 <build> <resources> <resource> <directory>src/main/resources< ...