2014-11-06 104 views
0

我到目前爲止是這樣的功能,但我知道這是不對的:編寫打印所有的整數的,一個整數整除

n=8  
if n % 5 == 0:  
    print "divisible by 5" 
elif n % 9 == 0:  
    print "divisible by 9" 
elif n % 8 == 0:  
    print "divisible by 8" 
+0

請記住,如果我問「如果不......」部分是什麼? – elare 2014-11-06 03:49:23

回答

1
n = 8 
for i in range(1,n+1): 
    if not n%i: 
     print "divisible by", i 
+0

不會範圍(1,(n + 1)/ 2)是否足夠好?並把n算作自動命中?換句話說,過去的四,八隻能被自己分開。 – 2014-11-06 03:42:26

0

你需要去了2每個價值高達SQRT(N)...,看看它是否是由該 數divisble ...

for i in range(2,int(sqrt(N))+1): 

和檢查,如果事情是整除

is_divisible = number%divisor == 0 

**注意,所有整數整除1和他們 - 自我

+0

他正在尋找整數因子,而不是素數因子。所以如果他只是通過'sqrt(n)'循環,他不得不產生整數因子'i'_and_'n/i'(每當'i'劃分'n'時),因爲他不會看到更大的因素。當'n'是一個完美的正方形時,他必須驗證'n/i'不等於'i'來防止產生'sqrt(n)'兩次。 – 2014-11-06 05:29:02

+0

公平點... – 2014-11-06 15:31:07

1

試試這個:

def factor_list(n): 
    for i in range(1,n+1): 
      if n%i==0: 
      print(i) 

這種方法的工作原理是看是否所有的數字直到n + 1整除它:

因此對於n = 8它將循環並檢查8/1,8/2 8/3 ... 8/8這裏的關鍵是模(%)運算符。它計算餘數。

邏輯:我們說n可以被m整除 - 如果(n%m)等於零,則餘數爲零。

您可以測試該代碼,對於所有n,如果從控制檯輸入需要「N」:N = INT(的raw_input())

0

更多的代碼,但更快大量的(因爲你沒有檢查每一個數字,只是素數)就是得到n的所有素數因子,並返回每個數組的乘積在因子的權力集合中。

import itertools as it 
import functools 
from operator import mul 
from collections import Counter 
import gmpy2 as gmpy 

def prod(a): 
    return functools.reduce(mul, a, 1) 


def get_primes(upper_limit=None): 
    if upper_limit: 
     yield from it.takewhile(lambda x: x < upper_limit, get_primes()) 
     return 
    prime = 2 
    while True: 
     yield int(prime) 
     prime = gmpy.next_prime(prime) 


def get_factors(n): 
    factors = Counter() 
    prime = get_primes() 
    while n != 1: 
     factor = next(prime) 
     while not n % factor: 
      n //= factor 
      factors[factor] += 1 
    return factors 

# From here: https://docs.python.org/2/library/itertools.html#recipes 
def powerset(iterable): 
    "powerset([1,2,3]) -->() (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" 
    s = list(iterable) 
    return it.chain.from_iterable(it.combinations(s, r) for r in range(len(s)+1)) 


def get_divisors(n): 
    factors = get_factors(n) 
    ret = (prod(i) for i in powerset(factors.elements())) 
    return set(ret) 

get_divisors(81)回報{1, 3, 9, 27, 81}

0

這看起來像黑魔法我,當我開始學習語言。儘管如此;

對於給定的n,打造蓄能器列表x

n = 162; x=[] 

然後遍歷整數i=2高達i=1+n/2並添加i到列表x如果n是整除i

for i in range(2,int(n/2)+1): x.extend(([],[i])[n%i==0]) 

或者

for i in range(2,int(n/2)+1): x.extend([i]) if n%i==0 else [] 

結果存儲在x

print(x) 
[2, 3, 6, 9, 18, 27, 54, 81] 

一起:

n = 162; x=[] 
for i in range(2,int(n/2)+1): x.extend(([],[i])[n%i==0]) 
print(x) 

說明:PEP 308

編輯:使用列表理解,甚至可以使這一個班輪:

n=162; x=[]; x.extend([i for i in range(2,int(n/2)+1) if n%i==0]); print(x)