2016-07-26 3 views
0

10,001stプライムを見つけようとしています。私はショートに「任意の」と私は他にしようとしていたとの要因のリストを検索をしようとしている任意のものを使用する(オイラー#7)

def seven(count): 

    desired_count = count 
    actual_count = 6 
    number = 15 

    while desired_count > actual_count: 

     factors_in_number = range(int((number**.5)+1)) 
     _factors_in_number = factors_in_number[2:] 

     print "prime count:" 
     print actual_count 
     print "current number:" 
     print number 
     print "factors:" 
     print _factors_in_number 

     if number % any(_factors_in_number) == 0: 
      number += 2 
      break 

     elif number % all(_factors_in_number) != 0: 
      actual_count += 1 
      number += 2 

    return number 

が、その後のelifました:これは私が持っていたものです。 Idk。ここで は私が得るものです:だから

seven(10001) 
prime count: 
6 
current number: 
15 
factors: 
[2, 3] 
prime count: 
6 
current number: 
17 
factors: 
[2, 3, 4] 
prime count: 
6 
current number: 
19 
factors: 
[2, 3, 4] 
prime count: 
6 
current number: 
21 
factors: 
[2, 3, 4] 
prime count: 
6 
current number: 
23 
factors: 
[2, 3, 4] 
prime count: 
6 
current number: 
25 
factors: 
[2, 3, 4, 5] 
prime count: 
6 
current number: 
27 
factors: 
[2, 3, 4, 5] 

、リストの要素は、正しく番号が増加するほど増加が、プライムカウントはしません、それはどんなの、すべてのとは何かを持っています。だから私はどのようにすべてと間違って使用していますか?

私は確かに速い方法があることを知っていますが、私は地面から自分のモンスターを取り除こうとしています。ありがとう!お急ぎ便

+0

「もしあれば(条件(x)for stuff)」とします。任意の(因子のfに対する数%f)。 any()とall()はboolを返します。 –

答えて

4

anyおよびallが意図したとおりに使用されていないため、actual_countが届きません。実際には、以下のelifブロックが実行されることはありません:

elif number % all(_factors_in_number) != 0: 
    actual_count += 1 
    number += 2 

この方法で適用された場合all(_factors_in_number)は常にTrueあるとTrueがそう条件は決してありません1として強制されているのでany_number MOD真は、常にゼロであるため、合格。代わりにanyブロックは、常にコンテナで、空でない場合はと長く渡されます。

mod操作は、コンテナのすべてのメンバー上で実行し、 allは条件がすべてのメンバーのために渡されることを強制されることを保証
elif all(number % some_integer!=0 for number in _factors_in_number): 
    actual_count += 1 
    number += 2 


あなたはおそらくチェックのように行わ持っているつもり。同じアップデートをanyに適用する必要があります。 all(_factors_in_number)またはany(_factors_in_number)を使用して

2

は間違いなく結果を与えていない、あなたが考えていることがある:だから

>>> help(any) 
Help on built-in function any in module builtins: 

any(iterable, /) 
    Return True if bool(x) is True for any x in the iterable. 

    If the iterable is empty, return False. 

正確に:

>>> any([1,2,3,4]) 
True 
>>> 7 % any([1,2,3,4]) #True is treated like 1 
0 

Prehapsは、それが実際にどのように動作するかを確認するためにhelp(any)を見てみましょう呼び出し内のループ内に条件付きの関数が必要な場合は、次のようにします。

if any(number%i == 0 for i in _factors_in_num): 
#and then 
if all(number%i != 0 for i in _factors_in_num): 
関連する問題