第一个Python程序--寻找质数

寻找N以内的质数,可以将N除以N-1前的所有质数,如果存在整除,则N不是质数,如果不能够整除,则是质数


开始进行代码

# -*- coding: utf-8 -*-
"""
Created on 2018-02-06

Using by Notepad++

@author: Binjoy Hong
"""
#寻找N以内的质数
#核心思想:一个数能被它之前的任何质数整除,那么它就不是质数,不能被它之前的任何质数整除的数是质数
def Find_prime_num(N):
    pri_collec=[2]
    Now_prime_amount=1
    i=3
    while i <= N:
        for cyc_j in range(0,Now_prime_amount)
            if i % pri_collec[j] == 0:
                break
            else:
                pri_collec.append(i)
                Now_prime_amount+=1
        i+=1
     return pri_collec
a=Find_prime_num(10000) #寻找10000以内的质数

上述程序段中,会产生一个问题,在

for cyc_j in range(0,Now_prime_amount)

这一段开始,当任意数N只能够对pri_collec 列表第一个元素进行检验,然后看是否整除,但是不会对列表中第2个元素开始进行整除检验。然后,还会产生叠加现象,比如当i=5时,5除以2余数不为0,但再除以3时,也不为0,则5加进去2次。

上述程序段运行会将非质数元素添加进去

接下来解决叠加及含有非质数问题

问题出现在while 循环段,在该处作相应修改即可。下面是完整的代码

def Find_prime_num(N):
    pri_collec=[2]
    Now_prime_amount=1
    i=3
    while i <= N:
        for cyc_j in range(0,Now_prime_amount):
            if i%pri_collec[cyc_j]==0:
                break
        else:
            pri_collec.append(i)
            Now_prime_amount+=1
        i+=1
    return pri_collec

在上述错误产生的另外一个根本原因,是对循环控制语句的使用不熟悉所导致。

for…else
在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行。while … else 也是一样。

添加功能

在完成了上述的主题功能后,如果我想计算程序在执行的时候使用了多少时间,然后总共循环了多少步。则代码:

import time
start_time1=time.clock()
def Find_prime_num(N):
    pri_collec=[2]
    Now_prime_amount=1
    i=3
    while i <= N:
        for cyc_j in range(0,Now_prime_amount):
            if i%pri_collec[cyc_j]==0:
                break
        else:
            pri_collec.append(i)
            Now_prime_amount+=1
        i+=1
    return pri_collec
a=Find_prime_num(10000)
end_time1=time.clock()
total_time1=end_time1-start_time1
total_step1=sum(list(range(3,len(a))),-2)
print('计算总共使用了',total_time1,'秒')
print('循环了',total_step1,'步')

同时,又学习了一个内置sum()

sum()
sum() 方法对系列进行求和计算。

下述代码摘自菜鸟教程


语法

以下是 sum() 方法的语法:

sum(iterable[, start])

参数

  • iterable – 可迭代对象,如列表。
  • start – 指定相加的参数,如果没有设置这个值,默认为0。

返回值

返回计算结果。

实例

>>>sum([0,1,2])  
3  
>>> sum((2, 3, 4), 1)        # 元组计算总和后再加 1
10
>>> sum([0,1,2,3,4], 2)      # 列表计算总和后再加 2
12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值