Edited at

1行素数判定 in Python3

More than 1 year has passed since last update.

とある記事を見たら作りたくなったので。

Python 3.6.0使用。


まずはニ行

from math import gcd

isprime=lambda x:x>1 and int(x)==x and True not in map(lambda a:gcd(x,a)!=1,range(2,x))


解説


  • 1より大きい

  • 整数で

  • 「xと2~xまでの整数で、公約数が1でない」ものが存在しない
    ものを素数とした。


gcdを定義する。

gcd=lambda x,y:max(map(lambda p:p if x%p==y%p==0 else 1,range(1,x)))


解説

xとyを1~pで割っていって、両方のあまりが0になったときのpを記録したmapの最大値をmax関数で得ている。


1行素数判定

文字数で言えば132文字です。

isprime=lambda x:x>1 and int(x)==x and True not in map(lambda a:max(map(lambda p:p if x%p==a%p==0 else 1,range(1,x)))!=1,range(2,x))


テスト

>>> isprime(1)

False
>>> isprime(2)
True
>>> isprime(3)
True
>>> isprime(4)
False
>>> isprime(5)
True
>>> isprime(6)
False
>>> isprime(3.14)
False