我到目前为止是这样的功能,但我知道这是不对的:编写打印所有的整数的,一个整数整除
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
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
不会范围(1,(n + 1)/ 2)是否足够好?并把n算作自动命中?换句话说,过去的四,八只能被自己分开。 – 2014-11-06 03:42:26
你需要去了2每个价值高达SQRT(N)...,看看它是否是由该 数divisble ...
for i in range(2,int(sqrt(N))+1):
和检查,如果事情是整除
is_divisible = number%divisor == 0
**注意,所有整数整除1和他们 - 自我
他正在寻找整数因子,而不是素数因子。所以如果他只是通过'sqrt(n)'循环,他不得不产生整数因子'i'_and_'n/i'(每当'i'划分'n'时),因为他不会看到更大的因素。当'n'是一个完美的正方形时,他必须验证'n/i'不等于'i'来防止产生'sqrt(n)'两次。 – 2014-11-06 05:29:02
公平点... – 2014-11-06 15:31:07
试试这个:
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())
更多的代码,但更快大量的(因为你没有检查每一个数字,只是素数)就是得到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}
这看起来像黑魔法我,当我开始学习语言。尽管如此;
对于给定的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)
请记住,如果我问“如果不......”部分是什么? – elare 2014-11-06 03:49:23