30/09/2018, 16:28

[Wiki] Hàm kiểm tra số nguyên tố trong Python theo cách lập trình hàm

def isprime(n):
    return len(filter( 
        lambda x:x==0,
        map(
            lambda y: n%y,range(2, int(n**0.5)+1)
        )
    ))==0

test

for i in range(2,100):
    if isprime(i):
        print i,

####output

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
LE Manh Cuong viết 18:44 ngày 30/09/2018

How about:

def is_prime(n):
    """ Check if n is a prime number

    @params:
    :n: integer number

    @returns: Boolean, True if n is prime number
             else False
    """
    return all(n%div and n%(div+2) for div in xrange(2, int(n**0.5)+1))

This gains a little performance:

import timeit

def isprime(n):
    return len(filter(
        lambda x:x==0,
        map(
            lambda y: n%y,range(2, int(n**0.5)+1)
        )
    ))==0
    
def is_prime(n):
    """ Check if n is a prime number
 
    @params:
    :n: integer number

    @returns: Boolean, True if n is prime number
             else False
    """
    return all(n%div and n%(div+2) for div in xrange(2, int(n**0.5)+1))
    
print timeit.timeit('[is_prime(n) for n in xrange(100)]', 'from __main__ import is_prime', number=10000)
print timeit.timeit('[isprime(n) for n in xrange(100)]', 'from __main__ import isprime', number=10000)

Run it:

$ python test.py
2.07219815254
3.40691709518
Nguyễn Minh Dũng viết 18:30 ngày 30/09/2018

@cuonglm Đạt thấy nó lệch nhiều đấy chứ. Tại sao tại sao nó lại lệch nhiều như vậy?

LE Manh Cuong viết 18:35 ngày 30/09/2018

@ltd filter() duyệt toàn bộ phần từ, all() return ngay khi điều kiện không thỏa mãn.

Quý Lv viết 18:35 ngày 30/09/2018
    # coding:utf8

def kt(so):
so = abs(so)
if so == 1:
return False
elif so == 2:
return True
elif so ==3:
return True
else:
for i in range(2,so-1):
if so % i ==0:
return False
break
else:
return True
print kt(input('nhap so: '))

Bài liên quan
0