簡體   English   中英

編寫一個函數,打印一個整數可除的所有整數

[英]Write a function that prints all of the whole numbers that an integer is divisible by

到目前為止,我的情況是這樣,但是我知道這是不對的:

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"
n = 8
for i in range(1,n+1):
    if not n%i:
        print "divisible by", i

嘗試這個:

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())

您需要遍歷每個值從2到sqrt(n)...,然后看該值是否可除以該數字...

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

並檢查是否可分割的東西

is_divisible = number%divisor == 0 

**請注意,所有整數都可被1整除

更多的代碼,但是對於大數則更快(因為您不必檢查每個數字,只需質數)就是獲取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} get_divisors(81) {1, 3, 9, 27, 81}

當我開始學習語言時,這對我來說就像是黑魔法。 盡管如此;

對於給定的n ,創建累加器列表x

n = 162; x=[]

然后將整數i=2循環到i=1+n/2 ,如果n可被i整除,則將i添加到列表x

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM