编写一个函数,打印整数可被整除的所有整数

时间:2014-11-06 02:58:19

标签: python

到目前为止,我有这个,但我知道这是不对的:

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"

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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 / 8/3 ... 8/8这里的键是模数(%)运算符。它计算余数。

逻辑:我们说n可以被m整除 - 如果(n%m)等于零,则余数为零。

如果您选择' n'对于所有n,您可以测试此代码。来自控制台输入:n = int(raw_input())

答案 2 :(得分:0)

你需要检查从2到sqrt(n)的每个值...并查看它是否可被分解 号码......

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

并检查某些内容是否可分割

is_divisible = number%divisor == 0 

**请注意,所有整数都可以被1和它们自己整除

答案 3 :(得分: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}

答案 4 :(得分: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)