「Python Recipes」に戻る |
---|
Release: | 1.0 |
---|---|
Date: | November 22, 2010 |
テスト環境
OS: Ubuntu10.10
Python2.6.6
はじめに¶
素数をどれだけ速く導き出せるかに挑戦したかったのですが、途中で挫折しました。
人の作ったアルゴリズムを使うので精一杯です。
xrange(2, 10000)
のところと
if 0 not in (x % y for y in xrange(2, x))
を工夫できればもっと速くなりますきっと。
これに気づかれたsuztomoさんはとてもすごいです。自分ももっと頑張ろう。
また時間ができたら書き直します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author: Iyori Komiyama
# Contact: hazimarino@gmail.co.jp
# site: http://hazimarino.blogspot.com/
"""\
素数かどうかを判定し、素数でなかったらどの数で分解できるのか表示する
9973 の素数で分解できる範囲まで。
"""
from __future__ import unicode_literals
def enter():
while True:
try:
digits = int(raw_input('Please input a number>> '))
if digits < 0: raise
except ValueError:
print("正の整数を入力してください")
else: return digits
def primes(value):
p_nums = (x for x in xrange(2, 10000)
if 0 not in (x % y for y in xrange(2, x)))
if (value == 1) or (value == 0):
print("{0} は素数ではありません".format(value))
return
for p in p_nums:
if value == p:
print("{0} は素数です".format(value))
return
elif not value % p:
print("{0} は素数ではありません: " \
"{1} x {2}".format(value, value / p, p))
return
else:
print("数値が大きすぎます")
def main():
print('素数かどうかを判定します')
print('*' * 80)
num = enter()
print('*' * 80)
primes(num)
if __name__ == '__main__':
main()
|
0 件のコメント:
コメントを投稿