精华内容
下载资源
问答
  • 如何用python求100以内的素数?质数(primenumber)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2、3、5、7、11、13、17、19。方法一,用for循环来实现num...

    5cfdf4407e290495.jpg

    如何用python求100以内的素数?

    质数(primenumber)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2、3、5、7、11、13、17、19。

    方法一,用for循环来实现num=[];

    i=2

    for i in range(2,100):

    j=2

    for j in range(2,i):

    if(i%j==0):

    break

    else:

    num.append(i)

    print(num)

    方法二,用函数来实现import math

    def func_get_prime(n):

    return filter(lambda x: not [x%i for i in range(2, int(math.sqrt(x))+1) if x%i ==0], range(2,n+1))

    print func_get_prime(100)

    输出结果为:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

    以上就是如何用python求素数的详细内容,更多请关注Gxl网其它相关文章!

    本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

    本文系统来源:php中文网

    展开全文
  • Python素数prime函数练习_Python源码实操素数prime函数练习1) 写一个函数isprime(x) 判断x是否为素数,如果是素数,返回True,否则返回Falsedef isprime(x):if x == 1:return Falseflag = Truefor i in range(2,x):if...

    Python素数prime函数练习_Python源码实操

    201907301564496814507730.jpg

    素数prime函数练习

    1) 写一个函数isprime(x) 判断x是否为素数,如果是素数,返回True,否则返回False

    def isprime(x):

    if x == 1:

    return False

    flag = True

    for i in range(2,x):

    if x % i == 0:

    flag = False

    return flag

    2) 写一个函数prime_m2n(m, n), 返回从m开始到n结束(不包含n)的范围内的素数列表

    如:

    L = prime_m2n(1, 10)

    print(L) # [2,3,5,7]

    def prime_m2n(m , n):

    L = []

    start = m if m < n else n

    end = m if m > n else n

    for i in range(start,end):

    if isprime(i):

    L.append(i)

    return L

    3) 写一个函数primes(n), 返回指定范围内素数(不包含n)的全部素数的列表,并打印这些素数

    如:

    L = prime(20)

    print(L) # [2,3,5,7,11,13,17,19]

    1) 打印 100以内的全部素数

    2) 打印 100以内全部素数的和

    def primes(n):

    return prime_m2n(1,n)

    L = primes(20)

    print(L)

    展开全文
  • 上学期上网络安全课的时候,杨老简单介绍了一些关于求素数的方法,闲着无聊,把筛选法用python实现了一下,发现有些好玩儿的地方:原理:素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除...

    上学期上网络安全课的时候,杨老简单介绍了一些关于求素数的方法,闲着无聊,把筛选法用python实现了一下,发现有些好玩儿的地方:

    原理:

    素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。在加密应用中起重要的位置,比如广为人知的RSA算法中,就是基于大整数的因式分解难题,寻找两个超大的素数然后相乘作为密钥的。一个比较常见的求素数的办法是埃拉托斯特尼筛法(the Sieve of Eratosthenes) ,说简单一点就是画表格,然后删表格,如图所示:

    Sieve_of_Eratosthenes_animation.gif

    从2开始依次往后面数,如果当前数字一个素数,那么就将所有其倍数的数从表中删除或者标记,然后最终得到所有的素数。

    实现:

    下面是python的一个实现:

    实现1:

    首先用dic存储n范围内的元素,然后依次标记,最后从头扫描一次dic,把合适的元素放在list中返回结果

    1 defprime(n):2 lis ={}3 for i in xrange(2,n+1):4 if not i inlis:5 lis[i] = 1

    6 k = i*2

    7 while k <=n:8 lis[k] =09 k = k+i10 ans =[]11 for i inlis:12 if lis[i] == 1:13 ans.append(i)14 return ans

    测试以后得到的结果是:求一千万以内的素数用了9.68秒

    可是我觉得使用1个dict和1个list存会很浪费空间(其实不然,一千万以内的素数只有66万个,相对一千万来说可以忽略不计),所以想改进一下算法

    实现2:

    这次只用一个list存数字,然后遍历删除

    1 defprimeC(n):2 lis = range(2,n+1)3 for i in xrange(2,n+1):4 if i inlis:5 k = i+i6 while k<=n:7 if k inlis:8 lis.remove(k)9 k = k+i10 return lis

    因为无法在for中删除list,所以使用一个xrange,然后每次判断k是否在lis中再做删除,结果:求十万以内的素数一共花了186.79秒。

    比较:

    在时间上,第一个方法远远比第二个办法有效率,dict是哈希实现,查询的速度是常数级的,所以在标记合数的时候所花费的时间非常少,但是list是顺序表,不知道内部是怎么实现in 和 remove的,从时间上可以大概推测出应该是顺序查找实现的,所以用如下代码做了测试:

    1 importrandom2 importtime3 deffind(source,test):4 for each intest:5 each insource6

    7 defremove(liss,test):8 for each intest:9 if each inliss:10 liss.remove(each)11

    12

    13 defremoveDic(dicc,test):14 for each intest:15 if each indicc:16 dicc[each] = 1

    17

    18 n = 100000

    19 m = 1000

    20 liss =range(n)21 dicc = {i:0 for i inxrange(n)}22 test =[]23 for i inxrange(m):24 test.append(random.randint(0,n))25

    26

    27

    28 s =time.clock()29 find(liss,test)30 print time.clock()-s31

    32

    33 s =time.clock()34 find(dicc,test)35 print time.clock()-s36

    37 s =time.clock()38 remove(liss,test)39 print time.clock()-s40

    41 s =time.clock()42 removeDic(dicc,test)43 print time.clock()-s

    结果是:

    1.10526960281

    0.00036479383832

    2.11714318396

    0.000374692766596

    可以看出,在查找方面list是远远不如dict的,说明list不应该是哈希查找,而remove的时间也远远大于哈希的赋值时间(好像这是句废话- -)

    不过由此判断第二种方法是一无是处的话未免言之过早了。因为第二种方法里面的实现是先申请了一段空间,然后再运算,而实现一的空间是动态增长的(在给哈希表赋值的那边体现),所以如果涨到一半发现内存不够用的话就会报错(测试1亿数据的时候就出现了这个问题),而实现二一开始就会报错,而不用做前面的一系列无用功。

    总之就是空间换时间,时间换空间的那些戏码。不过挺有意思。

    小结:

    求素数,list和dict的效率比较

    最后小tip:好像python的垃圾回收机制有点什么问题,我结束一次测试以后以前的内存不回收,有空了解一下,有一个暂时解决的办法。可以调用gc module里面的collect函数,挺好用~

    展开全文
  • Python求素数

    2021-04-01 12:12:10
    Python素数判断Filter列出100以内素数 Filter 首先了解一下这个函数,Python内建的filter()函数用于过滤序列,用法与map()函数类似,接收一个函数一个序列,不通点在filter()把传入的函数作用于每一个元素,根据...

    Python素数判断

    Filter

    首先了解一下这个函数,Python内建的filter()函数用于过滤序列,用法与map()函数类似,接收一个函数一个序列,不通点在filter()把传入的函数作用于每一个元素,根据返回值是true函数false,来判断元素的去留

    #在一个list中只保留奇数
    def is_odd(n):
        return n % 2 == 1
    print(list(filter(is_odd,[1,2,3,4,5,6,7,8,9,10])))
    
    

    列出100以内素数

    def _odd_iter():
        n = 1
        while True:
            n = n + 2
            yield n
    def _not_divisible(n):
        return lambda x:x % n > 0
    def primes():
        yield 2
        it = _odd_iter()
        while True:
            n = next(it)
            yield n
            it = filter(_not_divisible(n),it)
    for n in primes():
        if n < 100:
            print(n)
        else:
            break
    
    
    

    廖雪峰老师博客

    展开全文
  • python求素数

    2017-12-10 21:05:28
    在网上做python的题,突然想到的一种求素数做法,有没有更快的?欢迎炮轰def removeNum(ran,originRange): first = originRange[0] ran.append(first) for i in originRange: if i % first == 0: originRange....
  • 2和100之内的素数 for x in range(2,101): for y in range(2,x): if(x%y==0){ break } else{ print(x)} 判断是否是素数 p=int(input("请输入一个数:")) if p==1: print(p,"不是素数") for i in ...
  • python 求素数

    2020-01-16 11:07:03
    def primenumber(start,end): if start>=2: for n in range(start,end+1): for x in range(start,n): if n % x == 0: ...注意 none 在函数本身没有return,print后就会出现none 大概就是这个意思了
  • Python实现最大公约数及判断素数的方法本文实例讲述了Python实现最大公约数及判断素数的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/env pythondef showMaxFactor(num):count = num / 2while ...
  • 使用Python求素数

    万次阅读 2018-05-22 23:59:27
    #素数,只能被1和它自身整除的数 n = int(input("输入整数:") if n&lt;2:  print(n, "不是素数") for i in range(2,n):  if n%i == 0:  print("这个数不是素数")  ...
  • 使用函数求素数和prime(p),其中函数prime当用户传入参数p为素数时返回true,否则返回false. primesum(m,n),函数primesum返回区间[m,n]内所有素数的和。题目保证用户传入的参数1...
  • python基础——filter函数Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定...
  • 素数定义:素数:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。方法:计算素数的一个方法是埃氏筛法:首先,列出从2开始的所有自然数,构造一个序列:2, 3, 4, 5, 6, 7, 8...
  • 定义:代码可直接看下面求素数p原根的最终方法对于素数 p,如果存在一个正整数 16–>4–>5–>1,然后开始循环2不是7的原根,因为2–>4–>1–>2–>4–>1,过早的循环了对于素数pap−1≡1(modp)对于素数pap−1≡1...
  • 如何用python求100以内的素数?质数(primenumber)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2、3、5、7、11、13、17、19。方法一,用for循环来实现num...
  • Python 求素数

    2018-07-20 15:33:45
    #先构造一个从3开始的奇数序列 def _odd_iter(): n=1 while True: n=n+2 yield n def _not_divisible(n):#定义一个筛选器 ...def primes():#最后定义个生成器,不断返回下一个素数 yield 2 it=...
  • 题目:7-5就区间正整数内所有素数之和 (20分)【描述】m-n以内所有素数之和并输出。‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬...
  • 质数(prime number)又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。...总结python脚本判断一个数是否为素数的几种方法:#运用python的数学函数import mathdef isPrime(n):i...
  • 素数简介质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。方法1def primeNUM(min,max):if min==1:print('')min += 1for i in range(min, max+1):for j in ...
  • 质数(prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。 那么想计算出一个随机数是不是质数用python应该怎么写呢? 首先...
  • python 求素数和回数

    2020-08-27 22:23:42
    埃拉托色尼筛选法: (1)先把1删除(现今数学界1既不是质数也不是合数) (2)读取队列中当前最小的数2,然后把2的倍数删去 ...** python编程 ** def _int_iter(): #生成器生成从3开始的无限奇数序列
  • 素数简介质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。方法1def primeNUM(min,max):if min==1:print('')min += 1for i in range(min, max+1):for j in ...
  • Python程序,定义一个 prime() 函数分享整数 n 以内定义一个 prime() 函数分享整数 n 以内(不包括n)的所有素数(1不是素数定义一个 prime() 函数分享整数 n 以内(不包括n)的所有素数(1不是素数),并返回一个...
  • 方法一:判断一个数是不是素数(除1和本身之外有没有其他因数),再利用filter()函数过滤掉非素数#利用filter()函数得到1~1000内的所有素数#思路:判断一个数是不是素数,是则留下;不是则滤掉def prime(x):for i in...
  • 本文实例讲述了Python编程判断一个正整数是否为素数的方法。分享给大家供大家参考,具体如下:import stringimport math#判断是否素数函数def isPrime(n):if(n2):for d in range(2,int(math.ceil(math.sqrt(n))+1)...
  • #定义一个生成器返回素数 def sushu():  yield 2  it=jishu()#奇数序列  while True:  first=next(it)  yield first  it=filter(guolv(first),it)#过滤后得到新的迭代器 for n in sushu(): ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,237
精华内容 3,294
关键字:

python求素数函数

python 订阅